var retina={}; retina.root=(typeof exports==='undefined' ? window:exports); retina.config={ retinaImageSuffix:'@2x', check_mime_type: true, force_original_dimensions: true }; retina.config.retinaImagePattern=new RegExp(retina.config.retinaImageSuffix + "."); (function(){ function Retina(){} window.retina.root.Retina=Retina; Retina.configure=function(options){ if(options===null){ options={};} for (var prop in options){ if(options.hasOwnProperty(prop)){ window.retina.config[prop]=options[prop]; }} }; Retina.init=function(context){ if(context===null){ context=window.retina.root; } var existing_onload=context.onload||function(){}; context.onload=function(){ var images=document.getElementsByTagName('img'), retinaImages=[], i, image; for (i=0; i < images.length; i +=1){ image=images[i]; if(!retina.config.retinaImagePattern.test(image.getAttribute("src"))){ if(!!!image.getAttributeNode('data-no-retina')){ retinaImages.push(new RetinaImage(image)); }} } existing_onload(); };}; Retina.isRetina=function(){ var mediaQuery='(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)'; if(window.retina.root.devicePixelRatio > 1){ return true; } if(window.retina.root.matchMedia&&window.retina.root.matchMedia(mediaQuery).matches){ return true; } return false; }; var regexMatch=/\.\w+$/; function suffixReplace (match){ return window.retina.config.retinaImageSuffix + match; } function RetinaImagePath(path, at_2x_path){ this.path=path||''; if(typeof at_2x_path!=='undefined'&&at_2x_path!==null){ this.at_2x_path=at_2x_path; this.perform_check=false; }else{ if(undefined!==document.createElement){ var locationObject=document.createElement('a'); locationObject.href=this.path; locationObject.pathname=locationObject.pathname.replace(regexMatch, suffixReplace); this.at_2x_path=locationObject.href; }else{ var parts=this.path.split('?'); parts[0]=parts[0].replace(regexMatch, suffixReplace); this.at_2x_path=parts.join('?'); } this.perform_check=true; }} window.retina.root.RetinaImagePath=RetinaImagePath; RetinaImagePath.confirmed_paths=[]; RetinaImagePath.prototype.is_external=function(){ return !!(this.path.match(/^https?\:/i)&&!this.path.match('//' + document.domain)); }; RetinaImagePath.prototype.check_2x_variant=function(callback){ var http, that=this; if(this.is_external()){ return callback(false); }else if(!this.perform_check&&typeof this.at_2x_path!=='undefined'&&this.at_2x_path!==null){ return callback(true); }else if(this.at_2x_path in RetinaImagePath.confirmed_paths){ return callback(true); }else{ http=new XMLHttpRequest(); http.open('HEAD', this.at_2x_path); http.onreadystatechange=function(){ if(http.readyState!==4){ return callback(false); } if(http.status >=200&&http.status <=399){ if(window.retina.config.check_mime_type){ var type=http.getResponseHeader('Content-Type'); if(type===null||!type.match(/^image/i)){ return callback(false); }} RetinaImagePath.confirmed_paths.push(that.at_2x_path); return callback(true); }else{ return callback(false); }}; http.send(); }}; function RetinaImage(el){ this.el=el; this.path=new RetinaImagePath(this.el.getAttribute('src'), this.el.getAttribute('data-at2x')); var that=this; this.path.check_2x_variant(function(hasVariant){ if(hasVariant){ that.swap(); }}); } window.retina.root.RetinaImage=RetinaImage; RetinaImage.prototype.swap=function(path){ if(typeof path==='undefined'){ path=this.path.at_2x_path; } var that=this; function load(){ var width=that.el.offsetWidth; var height=that.el.offsetHeight; if(!that.el.complete||!width||!height){ setTimeout(load, 5); }else{ if(window.retina.config.force_original_dimensions){ that.el.setAttribute('width', width); that.el.setAttribute('height', height); } that.el.setAttribute('src', path); }} load(); }; if(Retina.isRetina()){ Retina.init(window.retina.root); }})(); (function (window, document, $, undefined){ "use strict"; var H=$("html"), W=$(window), D=$(document), F=$.fancybox=function (){ F.open.apply(this, arguments); }, IE=navigator.userAgent.match(/msie/i), didUpdate=null, isTouch=document.createTouch!==undefined, isQuery=function(obj){ return obj&&obj.hasOwnProperty&&obj instanceof $; }, isString=function(str){ return str&&$.type(str)==="string"; }, isPercentage=function(str){ return isString(str)&&str.indexOf('%') > 0; }, isScrollable=function(el){ return (el&&!(el.style.overflow&&el.style.overflow==='hidden')&&((el.clientWidth&&el.scrollWidth > el.clientWidth)||(el.clientHeight&&el.scrollHeight > el.clientHeight))); }, getScalar=function(orig, dim){ var value=parseInt(orig, 10)||0; if(dim&&isPercentage(orig)){ value=F.getViewport()[ dim ] / 100 * value; } return Math.ceil(value); }, getValue=function(value, dim){ return getScalar(value, dim) + 'px'; }; $.extend(F, { version: '2.1.5', defaults: { padding:15, margin:20, width:800, height:600, minWidth:100, minHeight:100, maxWidth:9999, maxHeight:9999, pixelRatio: 1, autoSize:true, autoHeight:false, autoWidth:false, autoResize:true, autoCenter:!isTouch, fitToView:true, aspectRatio:false, topRatio:0.5, leftRatio:0.5, scrolling:'auto', // 'auto', 'yes' or 'no' wrapCSS:'', arrows:true, closeBtn:true, closeClick:false, nextClick:false, mouseWheel:true, autoPlay:false, playSpeed:3000, preload:3, modal:false, loop:true, ajax:{ dataType:'html', headers:{ 'X-fancyBox': true }}, iframe:{ scrolling:'auto', preload:true }, swf:{ wmode: 'transparent', allowfullscreen:'true', allowscriptaccess:'always' }, keys:{ next:{ 13:'left', 34:'up', 39:'left', 40:'up' }, prev:{ 8:'right', 33:'down', 37:'right', 38:'down' }, close:[27], play:[32], toggle:[70] }, direction:{ next:'left', prev:'right' }, scrollOutside:true, index:0, type:null, href:null, content:null, title:null, tpl: { wrap:'
', image:'', iframe:'', error:'

The requested content cannot be loaded.
Please try again later.

', closeBtn:'', next:'', prev:'' }, openEffect:'fade', // 'elastic', 'fade' or 'none' openSpeed:250, openEasing:'swing', openOpacity:true, openMethod:'zoomIn', closeEffect:'fade', // 'elastic', 'fade' or 'none' closeSpeed:250, closeEasing:'swing', closeOpacity:true, closeMethod:'zoomOut', nextEffect:'elastic', // 'elastic', 'fade' or 'none' nextSpeed:250, nextEasing:'swing', nextMethod:'changeIn', prevEffect:'elastic', // 'elastic', 'fade' or 'none' prevSpeed:250, prevEasing:'swing', prevMethod:'changeOut', helpers:{ overlay:true, title:true }, onCancel:$.noop, beforeLoad:$.noop, afterLoad:$.noop, beforeShow:$.noop, afterShow:$.noop, beforeChange:$.noop, beforeClose:$.noop, afterClose:$.noop }, group:{}, opts:{}, previous:null, coming:null, current:null, isActive:false, isOpen:false, isOpened:false, wrap:null, skin:null, outer:null, inner:null, player:{ timer:null, isActive:false }, ajaxLoad:null, imgPreload:null, transitions:{}, helpers:{}, open: function (group, opts){ if(!group){ return; } if(!$.isPlainObject(opts)){ opts={};} if(false===F.close(true)){ return; } if(!$.isArray(group)){ group=isQuery(group) ? $(group).get():[group]; } $.each(group, function(i, element){ var obj={}, href, title, content, type, rez, hrefParts, selector; if($.type(element)==="object"){ if(element.nodeType){ element=$(element); } if(isQuery(element)){ obj={ href:element.data('fancybox-href')||element.attr('href'), title:element.data('fancybox-title')||element.attr('title'), isDom:true, element:element }; if($.metadata){ $.extend(true, obj, element.metadata()); }}else{ obj=element; }} href=opts.href||obj.href||(isString(element) ? element:null); title=opts.title!==undefined ? opts.title:obj.title||''; content=opts.content||obj.content; type=content ? 'html':(opts.type||obj.type); if(!type&&obj.isDom){ type=element.data('fancybox-type'); if(!type){ rez=element.prop('class').match(/fancybox\.(\w+)/); type=rez ? rez[1]:null; }} if(isString(href)){ if(!type){ if(F.isImage(href)){ type='image'; }else if(F.isSWF(href)){ type='swf'; }else if(href.charAt(0)==='#'){ type='inline'; }else if(isString(element)){ type='html'; content=element; }} if(type==='ajax'){ hrefParts=href.split(/\s+/, 2); href=hrefParts.shift(); selector=hrefParts.shift(); }} if(!content){ if(type==='inline'){ if(href){ content=$(isString(href) ? href.replace(/.*(?=#[^\s]+$)/, ''):href); }else if(obj.isDom){ content=element; }}else if(type==='html'){ content=href; }else if(!type&&!href&&obj.isDom){ type='inline'; content=element; }} $.extend(obj, { href:href, type:type, content:content, title:title, selector:selector }); group[ i ]=obj; }); F.opts=$.extend(true, {}, F.defaults, opts); if(opts.keys!==undefined){ F.opts.keys=opts.keys ? $.extend({}, F.defaults.keys, opts.keys):false; } F.group=group; return F._start(F.opts.index); }, cancel: function (){ var coming=F.coming; if(!coming||false===F.trigger('onCancel')){ return; } F.hideLoading(); if(F.ajaxLoad){ F.ajaxLoad.abort(); } F.ajaxLoad=null; if(F.imgPreload){ F.imgPreload.onload=F.imgPreload.onerror=null; } if(coming.wrap){ coming.wrap.stop(true, true).trigger('onReset').remove(); } F.coming=null; if(!F.current){ F._afterZoomOut(coming); }}, close: function (event){ F.cancel(); if(false===F.trigger('beforeClose')){ return; } F.unbindEvents(); if(!F.isActive){ return; } if(!F.isOpen||event===true){ $('.fancybox-wrap').stop(true).trigger('onReset').remove(); F._afterZoomOut(); }else{ F.isOpen=F.isOpened=false; F.isClosing=true; $('.fancybox-item, .fancybox-nav').remove(); F.wrap.stop(true, true).removeClass('fancybox-opened'); F.transitions[ F.current.closeMethod ](); }}, play: function(action){ var clear=function (){ clearTimeout(F.player.timer); }, set=function (){ clear(); if(F.current&&F.player.isActive){ F.player.timer=setTimeout(F.next, F.current.playSpeed); }}, stop=function (){ clear(); D.unbind('.player'); F.player.isActive=false; F.trigger('onPlayEnd'); }, start=function (){ if(F.current&&(F.current.loop||F.current.index < F.group.length - 1)){ F.player.isActive=true; D.bind({ 'onCancel.player beforeClose.player':stop, 'onUpdate.player':set, 'beforeLoad.player':clear }); set(); F.trigger('onPlayStart'); }}; if(action===true||(!F.player.isActive&&action!==false)){ start(); }else{ stop(); }}, next: function(direction){ var current=F.current; if(current){ if(!isString(direction)){ direction=current.direction.next; } F.jumpto(current.index + 1, direction, 'next'); }}, prev: function(direction){ var current=F.current; if(current){ if(!isString(direction)){ direction=current.direction.prev; } F.jumpto(current.index - 1, direction, 'prev'); }}, jumpto: function(index, direction, router){ var current=F.current; if(!current){ return; } index=getScalar(index); F.direction=direction||current.direction[ (index >=current.index ? 'next':'prev') ]; F.router=router||'jumpto'; if(current.loop){ if(index < 0){ index=current.group.length + (index % current.group.length); } index=index % current.group.length; } if(current.group[ index ]!==undefined){ F.cancel(); F._start(index); }}, reposition: function (e, onlyAbsolute){ var current=F.current, wrap=current ? current.wrap:null, pos; if(wrap){ pos=F._getPosition(onlyAbsolute); if(e&&e.type==='scroll'){ delete pos.position; wrap.stop(true, true).animate(pos, 200); }else{ wrap.css(pos); current.pos=$.extend({}, current.dim, pos); }} }, update: function (e){ var type=(e&&e.type), anyway = !type||type==='orientationchange'; if(anyway){ clearTimeout(didUpdate); didUpdate=null; } if(!F.isOpen||didUpdate){ return; } didUpdate=setTimeout(function(){ var current=F.current; if(!current||F.isClosing){ return; } F.wrap.removeClass('fancybox-tmp'); if(anyway||type==='load'||(type==='resize'&¤t.autoResize)){ F._setDimension(); } if(!(type==='scroll'&¤t.canShrink)){ F.reposition(e); } F.trigger('onUpdate'); didUpdate=null; }, (anyway&&!isTouch ? 0:300)); }, toggle: function(action){ if(F.isOpen){ F.current.fitToView=$.type(action)==="boolean" ? action:!F.current.fitToView; if(isTouch){ F.wrap.removeAttr('style').addClass('fancybox-tmp'); F.trigger('onUpdate'); } F.update(); }}, hideLoading: function (){ D.unbind('.loading'); $('#fancybox-loading').remove(); }, showLoading: function (){ var el, viewport; F.hideLoading(); el=$('
').click(F.cancel).appendTo('body'); D.bind('keydown.loading', function(e){ if((e.which||e.keyCode)===27){ e.preventDefault(); F.cancel(); }}); if(!F.defaults.fixed){ viewport=F.getViewport(); el.css({ position:'absolute', top:(viewport.h * 0.5) + viewport.y, left:(viewport.w * 0.5) + viewport.x }); }}, getViewport: function (){ var locked=(F.current&&F.current.locked)||false, rez={ x: W.scrollLeft(), y: W.scrollTop() }; if(locked){ rez.w=locked[0].clientWidth; rez.h=locked[0].clientHeight; }else{ rez.w=isTouch&&window.innerWidth ? window.innerWidth:W.width(); rez.h=isTouch&&window.innerHeight ? window.innerHeight:W.height(); } return rez; }, unbindEvents: function (){ if(F.wrap&&isQuery(F.wrap)){ F.wrap.unbind('.fb'); } D.unbind('.fb'); W.unbind('.fb'); }, bindEvents: function (){ var current=F.current, keys; if(!current){ return; } W.bind('orientationchange.fb' + (isTouch ? '':' resize.fb') + (current.autoCenter&&!current.locked ? ' scroll.fb':''), F.update); keys=current.keys; if(keys){ D.bind('keydown.fb', function (e){ var code=e.which||e.keyCode, target=e.target||e.srcElement; if(code===27&&F.coming){ return false; } if(!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey&&!(target&&(target.type||$(target).is('[contenteditable]')))){ $.each(keys, function(i, val){ if(current.group.length > 1&&val[ code ]!==undefined){ F[ i ](val[ code ]); e.preventDefault(); return false; } if($.inArray(code, val) > -1){ F[ i ] (); e.preventDefault(); return false; }}); }}); } if($.fn.mousewheel&¤t.mouseWheel){ F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY){ var target=e.target||null, parent=$(target), canScroll=false; while (parent.length){ if(canScroll||parent.is('.fancybox-skin')||parent.is('.fancybox-wrap')){ break; } canScroll=isScrollable(parent[0]); parent=$(parent).parent(); } if(delta!==0&&!canScroll){ if(F.group.length > 1&&!current.canShrink){ if(deltaY > 0||deltaX > 0){ F.prev(deltaY > 0 ? 'down':'left'); }else if(deltaY < 0||deltaX < 0){ F.next(deltaY < 0 ? 'up':'right'); } e.preventDefault(); }} }); }}, trigger: function (event, o){ var ret, obj=o||F.coming||F.current; if(!obj){ return; } if($.isFunction(obj[event])){ ret=obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); } if(ret===false){ return false; } if(obj.helpers){ $.each(obj.helpers, function (helper, opts){ if(opts&&F.helpers[helper]&&$.isFunction(F.helpers[helper][event])){ F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); }}); } D.trigger(event); }, isImage: function (str){ return isString(str)&&str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); }, isSWF: function (str){ return isString(str)&&str.match(/\.(swf)((\?|#).*)?$/i); }, _start: function (index){ var coming={}, obj, href, type, margin, padding; index=getScalar(index); obj=F.group[ index ]||null; if(!obj){ return false; } coming=$.extend(true, {}, F.opts, obj); margin=coming.margin; padding=coming.padding; if($.type(margin)==='number'){ coming.margin=[margin, margin, margin, margin]; } if($.type(padding)==='number'){ coming.padding=[padding, padding, padding, padding]; } if(coming.modal){ $.extend(true, coming, { closeBtn:false, closeClick:false, nextClick:false, arrows:false, mouseWheel:false, keys:null, helpers: { overlay:{ closeClick:false }} }); } if(coming.autoSize){ coming.autoWidth=coming.autoHeight=true; } if(coming.width==='auto'){ coming.autoWidth=true; } if(coming.height==='auto'){ coming.autoHeight=true; } /* * Add reference to the group, so it`s possible to access from callbacks, example: * afterLoad:function(){ * this.title='Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title:''); * } */ coming.group=F.group; coming.index=index; F.coming=coming; if(false===F.trigger('beforeLoad')){ F.coming=null; return; } type=coming.type; href=coming.href; if(!type){ F.coming=null; if(F.current&&F.router&&F.router!=='jumpto'){ F.current.index=index; return F[ F.router ](F.direction); } return false; } F.isActive=true; if(type==='image'||type==='swf'){ coming.autoHeight=coming.autoWidth=false; coming.scrolling='visible'; } if(type==='image'){ coming.aspectRatio=true; } if(type==='iframe'&&isTouch){ coming.scrolling='scroll'; } coming.wrap=$(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile':'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo(coming.parent||'body'); $.extend(coming, { skin:$('.fancybox-skin', coming.wrap), outer:$('.fancybox-outer', coming.wrap), inner:$('.fancybox-inner', coming.wrap) }); $.each(["Top", "Right", "Bottom", "Left"], function(i, v){ coming.skin.css('padding' + v, getValue(coming.padding[ i ])); }); F.trigger('onReady'); if(type==='inline'||type==='html'){ if(!coming.content||!coming.content.length){ return F._error('content'); }}else if(!href){ return F._error('href'); } if(type==='image'){ F._loadImage(); }else if(type==='ajax'){ F._loadAjax(); }else if(type==='iframe'){ F._loadIframe(); }else{ F._afterLoad(); }}, _error: function(type){ $.extend(F.coming, { type:'html', autoWidth:true, autoHeight:true, minWidth:0, minHeight:0, scrolling:'no', hasError:type, content:F.coming.tpl.error }); F._afterLoad(); }, _loadImage: function (){ var img=F.imgPreload=new Image(); img.onload=function (){ this.onload=this.onerror=null; F.coming.width=this.width / F.opts.pixelRatio; F.coming.height=this.height / F.opts.pixelRatio; F._afterLoad(); }; img.onerror=function (){ this.onload=this.onerror=null; F._error('image'); }; img.src=F.coming.href; if(img.complete!==true){ F.showLoading(); }}, _loadAjax: function (){ var coming=F.coming; F.showLoading(); F.ajaxLoad=$.ajax($.extend({}, coming.ajax, { url: coming.href, error: function (jqXHR, textStatus){ if(F.coming&&textStatus!=='abort'){ F._error('ajax', jqXHR); }else{ F.hideLoading(); }}, success: function (data, textStatus){ if(textStatus==='success'){ coming.content=data; F._afterLoad(); }} })); }, _loadIframe: function(){ var coming=F.coming, iframe=$(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) .attr('scrolling', isTouch ? 'auto':coming.iframe.scrolling) .attr('src', coming.href); $(coming.wrap).bind('onReset', function (){ try { $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); } catch (e){}}); if(coming.iframe.preload){ F.showLoading(); iframe.one('load', function(){ $(this).data('ready', 1); if(!isTouch){ $(this).bind('load.fb', F.update); } $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); F._afterLoad(); }); } coming.content=iframe.appendTo(coming.inner); if(!coming.iframe.preload){ F._afterLoad(); }}, _preloadImages: function(){ var group=F.group, current=F.current, len=group.length, cnt=current.preload ? Math.min(current.preload, len - 1):0, item, i; for (i=1; i <=cnt; i +=1){ item=group[ (current.index + i) % len ]; if(item.type==='image'&&item.href){ new Image().src=item.href; }} }, _afterLoad: function (){ var coming=F.coming, previous=F.current, placeholder='fancybox-placeholder', current, content, type, scrolling, href, embed; F.hideLoading(); if(!coming||F.isActive===false){ return; } if(false===F.trigger('afterLoad', coming, previous)){ coming.wrap.stop(true).trigger('onReset').remove(); F.coming=null; return; } if(previous){ F.trigger('beforeChange', previous); previous.wrap.stop(true).removeClass('fancybox-opened') .find('.fancybox-item, .fancybox-nav') .remove(); } F.unbindEvents(); current=coming; content=coming.content; type=coming.type; scrolling=coming.scrolling; $.extend(F, { wrap:current.wrap, skin:current.skin, outer:current.outer, inner:current.inner, current:current, previous:previous }); href=current.href; switch (type){ case 'inline': case 'ajax': case 'html': if(current.selector){ content=$('
').html(content).find(current.selector); }else if(isQuery(content)){ if(!content.data(placeholder)){ content.data(placeholder, $('
').insertAfter(content).hide()); } content=content.show().detach(); current.wrap.bind('onReset', function (){ if($(this).find(content).length){ content.hide().replaceAll(content.data(placeholder)).data(placeholder, false); }}); } break; case 'image': content=current.tpl.image.replace('{href}', href); break; case 'swf': content=''; embed=''; $.each(current.swf, function(name, val){ content +=''; embed +=' ' + name + '="' + val + '"'; }); content +=''; break; } if(!(isQuery(content)&&content.parent().is(current.inner))){ current.inner.append(content); } F.trigger('beforeShow'); current.inner.css('overflow', scrolling==='yes' ? 'scroll':(scrolling==='no' ? 'hidden':scrolling)); F._setDimension(); F.reposition(); F.isOpen=false; F.coming=null; F.bindEvents(); if(!F.isOpened){ $('.fancybox-wrap').not(current.wrap).stop(true).trigger('onReset').remove(); }else if(previous.prevMethod){ F.transitions[ previous.prevMethod ](); } F.transitions[ F.isOpened ? current.nextMethod:current.openMethod ](); F._preloadImages(); }, _setDimension: function (){ var viewport=F.getViewport(), steps=0, canShrink=false, canExpand=false, wrap=F.wrap, skin=F.skin, inner=F.inner, current=F.current, width=current.width, height=current.height, minWidth=current.minWidth, minHeight=current.minHeight, maxWidth=current.maxWidth, maxHeight=current.maxHeight, scrolling=current.scrolling, scrollOut=current.scrollOutside ? current.scrollbarWidth:0, margin=current.margin, wMargin=getScalar(margin[1] + margin[3]), hMargin=getScalar(margin[0] + margin[2]), wPadding, hPadding, wSpace, hSpace, origWidth, origHeight, origMaxWidth, origMaxHeight, ratio, width_, height_, maxWidth_, maxHeight_, iframe, body; wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); wPadding=getScalar(skin.outerWidth(true) - skin.width()); hPadding=getScalar(skin.outerHeight(true) - skin.height()); wSpace=wMargin + wPadding; hSpace=hMargin + hPadding; origWidth=isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100:width; origHeight=isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100:height; if(current.type==='iframe'){ iframe=current.content; if(current.autoHeight&&iframe.data('ready')===1){ try { if(iframe[0].contentWindow.document.location){ inner.width(origWidth).height(9999); body=iframe.contents().find('body'); if(scrollOut){ body.css('overflow-x', 'hidden'); } origHeight=body.outerHeight(true); }} catch (e){}} }else if(current.autoWidth||current.autoHeight){ inner.addClass('fancybox-tmp'); if(!current.autoWidth){ inner.width(origWidth); } if(!current.autoHeight){ inner.height(origHeight); } if(current.autoWidth){ origWidth=inner.width(); } if(current.autoHeight){ origHeight=inner.height(); } inner.removeClass('fancybox-tmp'); } width=getScalar(origWidth); height=getScalar(origHeight); ratio=origWidth / origHeight; minWidth=getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace:minWidth); maxWidth=getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace:maxWidth); minHeight=getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace:minHeight); maxHeight=getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace:maxHeight); origMaxWidth=maxWidth; origMaxHeight=maxHeight; if(current.fitToView){ maxWidth=Math.min(viewport.w - wSpace, maxWidth); maxHeight=Math.min(viewport.h - hSpace, maxHeight); } maxWidth_=viewport.w - wMargin; maxHeight_=viewport.h - hMargin; if(current.aspectRatio){ if(width > maxWidth){ width=maxWidth; height=getScalar(width / ratio); } if(height > maxHeight){ height=maxHeight; width=getScalar(height * ratio); } if(width < minWidth){ width=minWidth; height=getScalar(width / ratio); } if(height < minHeight){ height=minHeight; width=getScalar(height * ratio); }}else{ width=Math.max(minWidth, Math.min(width, maxWidth)); if(current.autoHeight&¤t.type!=='iframe'){ inner.width(width); height=inner.height(); } height=Math.max(minHeight, Math.min(height, maxHeight)); } if(current.fitToView){ inner.width(width).height(height); wrap.width(width + wPadding); width_=wrap.width(); height_=wrap.height(); if(current.aspectRatio){ while ((width_ > maxWidth_||height_ > maxHeight_)&&width > minWidth&&height > minHeight){ if(steps++ > 19){ break; } height=Math.max(minHeight, Math.min(maxHeight, height - 10)); width=getScalar(height * ratio); if(width < minWidth){ width=minWidth; height=getScalar(width / ratio); } if(width > maxWidth){ width=maxWidth; height=getScalar(width / ratio); } inner.width(width).height(height); wrap.width(width + wPadding); width_=wrap.width(); height_=wrap.height(); }}else{ width=Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); height=Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); }} if(scrollOut&&scrolling==='auto'&&height < origHeight&&(width + wPadding + scrollOut) < maxWidth_){ width +=scrollOut; } inner.width(width).height(height); wrap.width(width + wPadding); width_=wrap.width(); height_=wrap.height(); canShrink=(width_ > maxWidth_||height_ > maxHeight_)&&width > minWidth&&height > minHeight; canExpand=current.aspectRatio ? (width < origMaxWidth&&height < origMaxHeight&&width < origWidth&&height < origHeight):((width < origMaxWidth||height < origMaxHeight)&&(width < origWidth||height < origHeight)); $.extend(current, { dim:{ width:getValue(width_), height:getValue(height_) }, origWidth:origWidth, origHeight:origHeight, canShrink:canShrink, canExpand:canExpand, wPadding:wPadding, hPadding:hPadding, wrapSpace:height_ - skin.outerHeight(true), skinSpace:skin.height() - height }); if(!iframe&¤t.autoHeight&&height > minHeight&&height < maxHeight&&!canExpand){ inner.height('auto'); }}, _getPosition: function (onlyAbsolute){ var current=F.current, viewport=F.getViewport(), margin=current.margin, width=F.wrap.width() + margin[1] + margin[3], height=F.wrap.height() + margin[0] + margin[2], rez={ position: 'absolute', top:margin[0], left:margin[3] }; if(current.autoCenter&¤t.fixed&&!onlyAbsolute&&height <=viewport.h&&width <=viewport.w){ rez.position='fixed'; }else if(!current.locked){ rez.top +=viewport.y; rez.left +=viewport.x; } rez.top=getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); rez.left=getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); return rez; }, _afterZoomIn: function (){ var current=F.current; if(!current){ return; } F.isOpen=F.isOpened=true; F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); F.update(); if(current.closeClick||(current.nextClick&&F.group.length > 1)){ F.inner.css('cursor', 'pointer').bind('click.fb', function(e){ if(!$(e.target).is('a')&&!$(e.target).parent().is('a')){ e.preventDefault(); F[ current.closeClick ? 'close':'next' ](); }}); } if(current.closeBtn){ $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e){ e.preventDefault(); F.close(); }); } if(current.arrows&&F.group.length > 1){ if(current.loop||current.index > 0){ $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); } if(current.loop||current.index < F.group.length - 1){ $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); }} F.trigger('afterShow'); if(!current.loop&¤t.index===current.group.length - 1){ F.play(false); }else if(F.opts.autoPlay&&!F.player.isActive){ F.opts.autoPlay=false; F.play(); }}, _afterZoomOut: function(obj){ obj=obj||F.current; $('.fancybox-wrap').trigger('onReset').remove(); $.extend(F, { group:{}, opts:{}, router:false, current:null, isActive:false, isOpened:false, isOpen:false, isClosing:false, wrap:null, skin:null, outer:null, inner:null }); F.trigger('afterClose', obj); }}); F.transitions={ getOrigPosition: function (){ var current=F.current, element=current.element, orig=current.orig, pos={}, width=50, height=50, hPadding=current.hPadding, wPadding=current.wPadding, viewport=F.getViewport(); if(!orig&¤t.isDom&&element.is(':visible')){ orig=element.find('img:first'); if(!orig.length){ orig=element; }} if(isQuery(orig)){ pos=orig.offset(); if(orig.is('img')){ width=orig.outerWidth(); height=orig.outerHeight(); }}else{ pos.top=viewport.y + (viewport.h - height) * current.topRatio; pos.left=viewport.x + (viewport.w - width) * current.leftRatio; } if(F.wrap.css('position')==='fixed'||current.locked){ pos.top -=viewport.y; pos.left -=viewport.x; } pos={ top:getValue(pos.top - hPadding * current.topRatio), left:getValue(pos.left - wPadding * current.leftRatio), width:getValue(width + wPadding), height:getValue(height + hPadding) }; return pos; }, step: function (now, fx){ var ratio, padding, value, prop=fx.prop, current=F.current, wrapSpace=current.wrapSpace, skinSpace=current.skinSpace; if(prop==='width'||prop==='height'){ ratio=fx.end===fx.start ? 1:(now - fx.start) / (fx.end - fx.start); if(F.isClosing){ ratio=1 - ratio; } padding=prop==='width' ? current.wPadding:current.hPadding; value=now - padding; F.skin[ prop ](getScalar(prop==='width' ? value:value - (wrapSpace * ratio))); F.inner[ prop ](getScalar(prop==='width' ? value:value - (wrapSpace * ratio) - (skinSpace * ratio))); }}, zoomIn: function (){ var current=F.current, startPos=current.pos, effect=current.openEffect, elastic=effect==='elastic', endPos=$.extend({opacity:1}, startPos); delete endPos.position; if(elastic){ startPos=this.getOrigPosition(); if(current.openOpacity){ startPos.opacity=0.1; }}else if(effect==='fade'){ startPos.opacity=0.1; } F.wrap.css(startPos).animate(endPos, { duration:effect==='none' ? 0:current.openSpeed, easing:current.openEasing, step:elastic ? this.step:null, complete:F._afterZoomIn }); }, zoomOut: function (){ var current=F.current, effect=current.closeEffect, elastic=effect==='elastic', endPos={opacity:0.1}; if(elastic){ endPos=this.getOrigPosition(); if(current.closeOpacity){ endPos.opacity=0.1; }} F.wrap.animate(endPos, { duration:effect==='none' ? 0:current.closeSpeed, easing:current.closeEasing, step:elastic ? this.step:null, complete:F._afterZoomOut }); }, changeIn: function (){ var current=F.current, effect=current.nextEffect, startPos=current.pos, endPos={ opacity:1 }, direction=F.direction, distance=200, field; startPos.opacity=0.1; if(effect==='elastic'){ field=direction==='down'||direction==='up' ? 'top':'left'; if(direction==='down'||direction==='right'){ startPos[ field ]=getValue(getScalar(startPos[ field ]) - distance); endPos[ field ]='+=' + distance + 'px'; }else{ startPos[ field ]=getValue(getScalar(startPos[ field ]) + distance); endPos[ field ]='-=' + distance + 'px'; }} if(effect==='none'){ F._afterZoomIn(); }else{ F.wrap.css(startPos).animate(endPos, { duration:current.nextSpeed, easing:current.nextEasing, complete:F._afterZoomIn }); }}, changeOut: function (){ var previous=F.previous, effect=previous.prevEffect, endPos={ opacity:0.1 }, direction=F.direction, distance=200; if(effect==='elastic'){ endPos[ direction==='down'||direction==='up' ? 'top':'left' ]=(direction==='up'||direction==='left' ? '-':'+') + '=' + distance + 'px'; } previous.wrap.animate(endPos, { duration:effect==='none' ? 0:previous.prevSpeed, easing:previous.prevEasing, complete:function (){ $(this).trigger('onReset').remove(); }}); }}; F.helpers.overlay={ defaults:{ closeClick:true, speedOut:200, showEarly:true, css:{}, locked:!isTouch, fixed:true }, overlay:null, fixed:false, el:$('html'), create:function(opts){ opts=$.extend({}, this.defaults, opts); if(this.overlay){ this.close(); } this.overlay=$('
').appendTo(F.coming ? F.coming.parent:opts.parent); this.fixed=false; if(opts.fixed&&F.defaults.fixed){ this.overlay.addClass('fancybox-overlay-fixed'); this.fixed=true; }}, open:function(opts){ var that=this; opts=$.extend({}, this.defaults, opts); if(this.overlay){ this.overlay.unbind('.overlay').width('auto').height('auto'); }else{ this.create(opts); } if(!this.fixed){ W.bind('resize.overlay', $.proxy(this.update, this)); this.update(); } if(opts.closeClick){ this.overlay.bind('click.overlay', function(e){ if($(e.target).hasClass('fancybox-overlay')){ if(F.isActive){ F.close(); }else{ that.close(); } return false; }}); } this.overlay.css(opts.css).show(); }, close:function(){ var scrollV, scrollH; W.unbind('resize.overlay'); if(this.el.hasClass('fancybox-lock')){ $('.fancybox-margin').removeClass('fancybox-margin'); scrollV=W.scrollTop(); scrollH=W.scrollLeft(); this.el.removeClass('fancybox-lock'); W.scrollTop(scrollV).scrollLeft(scrollH); } $('.fancybox-overlay').remove().hide(); $.extend(this, { overlay:null, fixed:false }); }, update:function (){ var width='100%', offsetWidth; this.overlay.width(width).height('100%'); if(IE){ offsetWidth=Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); if(D.width() > offsetWidth){ width=D.width(); }}else if(D.width() > W.width()){ width=D.width(); } this.overlay.width(width).height(D.height()); }, onReady:function (opts, obj){ var overlay=this.overlay; $('.fancybox-overlay').stop(true, true); if(!overlay){ this.create(opts); } if(opts.locked&&this.fixed&&obj.fixed){ if(!overlay){ this.margin=D.height() > W.height() ? $('html').css('margin-right').replace("px", ""):false; } obj.locked=this.overlay.append(obj.wrap); obj.fixed=false; } if(opts.showEarly===true){ this.beforeShow.apply(this, arguments); }}, beforeShow:function(opts, obj){ var scrollV, scrollH; if(obj.locked){ if(this.margin!==false){ $('*').filter(function(){ return ($(this).css('position')==='fixed'&&!$(this).hasClass("fancybox-overlay")&&!$(this).hasClass("fancybox-wrap")); }).addClass('fancybox-margin'); this.el.addClass('fancybox-margin'); } scrollV=W.scrollTop(); scrollH=W.scrollLeft(); this.el.addClass('fancybox-lock'); W.scrollTop(scrollV).scrollLeft(scrollH); } this.open(opts); }, onUpdate:function(){ if(!this.fixed){ this.update(); }}, afterClose: function (opts){ if(this.overlay&&!F.coming){ this.overlay.fadeOut(opts.speedOut, $.proxy(this.close, this)); }} }; F.helpers.title={ defaults:{ type:'float', // 'float', 'inside', 'outside' or 'over', position:'bottom' // 'top' or 'bottom' }, beforeShow: function (opts){ var current=F.current, text=current.title, type=opts.type, title, target; if($.isFunction(text)){ text=text.call(current.element, current); } if(!isString(text)||$.trim(text)===''){ return; } title=$('
' + text + '
'); switch (type){ case 'inside': target=F.skin; break; case 'outside': target=F.wrap; break; case 'over': target=F.inner; break; default: // 'float' target=F.skin; title.appendTo('body'); if(IE){ title.width(title.width()); } title.wrapInner(''); F.current.margin[2] +=Math.abs(getScalar(title.css('margin-bottom'))); break; } title[ (opts.position==='top' ? 'prependTo':'appendTo') ](target); }}; $.fn.fancybox=function (options){ var index, that=$(this), selector=this.selector||'', run=function(e){ var what=$(this).blur(), idx=index, relType, relVal; if(!(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&!what.is('.fancybox-wrap')){ relType=options.groupAttr||'data-fancybox-group'; relVal=what.attr(relType); if(!relVal){ relType='rel'; relVal=what.get(0)[ relType ]; } if(relVal&&relVal!==''&&relVal!=='nofollow'){ what=selector.length ? $(selector):that; what=what.filter('[' + relType + '="' + relVal + '"]'); idx=what.index(this); } options.index=idx; if(F.open(what, options)!==false){ e.preventDefault(); }} }; options=options||{}; index=options.index||0; if(!selector||options.live===false){ that.unbind('click.fb-start').bind('click.fb-start', run); }else{ D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); } this.filter('[data-fancybox-start=1]').trigger('click'); return this; }; D.ready(function(){ var w1, w2; if($.scrollbarWidth===undefined){ $.scrollbarWidth=function(){ var parent=$('
').appendTo('body'), child=parent.children(), width=child.innerWidth() - child.height(99).innerWidth(); parent.remove(); return width; };} if($.support.fixedPosition===undefined){ $.support.fixedPosition=(function(){ var elem=$('
').appendTo('body'), fixed=(elem[0].offsetTop===20||elem[0].offsetTop===15); elem.remove(); return fixed; }()); } $.extend(F.defaults, { scrollbarWidth:$.scrollbarWidth(), fixed:$.support.fixedPosition, parent:$('body') }); w1=$(window).width(); H.addClass('fancybox-lock-test'); w2=$(window).width(); H.removeClass('fancybox-lock-test'); $("").appendTo("head"); }); }(window, document, jQuery)); (function ($){ if(typeof $.fn.each2=="undefined"){ $.extend($.fn, { each2:function (c){ var j=$([0]), i=-1, l=this.length; while ( ++i < l && (j.context=j[0]=this[i]) && c.call(j[0], i, j)!==false //"this"=DOM, i=index, j=jQuery object ); return this; }}); }})(jQuery); (function ($, undefined){ "use strict"; if(window.Select2!==undefined){ return; } var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer, lastMousePosition={x:0,y:0}, $document, scrollBarDimensions, KEY={ TAB: 9, ENTER: 13, ESC: 27, SPACE: 32, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, SHIFT: 16, CTRL: 17, ALT: 18, PAGE_UP: 33, PAGE_DOWN: 34, HOME: 36, END: 35, BACKSPACE: 8, DELETE: 46, isArrow: function (k){ k=k.which ? k.which:k; switch (k){ case KEY.LEFT: case KEY.RIGHT: case KEY.UP: case KEY.DOWN: return true; } return false; }, isControl: function (e){ var k=e.which; switch (k){ case KEY.SHIFT: case KEY.CTRL: case KEY.ALT: return true; } if(e.metaKey) return true; return false; }, isFunctionKey: function (k){ k=k.which ? k.which:k; return k >=112&&k <=123; }}, MEASURE_SCROLLBAR_TEMPLATE="
", DIACRITICS={"\u24B6":"A","\uFF21":"A","\u00C0":"A","\u00C1":"A","\u00C2":"A","\u1EA6":"A","\u1EA4":"A","\u1EAA":"A","\u1EA8":"A","\u00C3":"A","\u0100":"A","\u0102":"A","\u1EB0":"A","\u1EAE":"A","\u1EB4":"A","\u1EB2":"A","\u0226":"A","\u01E0":"A","\u00C4":"A","\u01DE":"A","\u1EA2":"A","\u00C5":"A","\u01FA":"A","\u01CD":"A","\u0200":"A","\u0202":"A","\u1EA0":"A","\u1EAC":"A","\u1EB6":"A","\u1E00":"A","\u0104":"A","\u023A":"A","\u2C6F":"A","\uA732":"AA","\u00C6":"AE","\u01FC":"AE","\u01E2":"AE","\uA734":"AO","\uA736":"AU","\uA738":"AV","\uA73A":"AV","\uA73C":"AY","\u24B7":"B","\uFF22":"B","\u1E02":"B","\u1E04":"B","\u1E06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24B8":"C","\uFF23":"C","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u00C7":"C","\u1E08":"C","\u0187":"C","\u023B":"C","\uA73E":"C","\u24B9":"D","\uFF24":"D","\u1E0A":"D","\u010E":"D","\u1E0C":"D","\u1E10":"D","\u1E12":"D","\u1E0E":"D","\u0110":"D","\u018B":"D","\u018A":"D","\u0189":"D","\uA779":"D","\u01F1":"DZ","\u01C4":"DZ","\u01F2":"Dz","\u01C5":"Dz","\u24BA":"E","\uFF25":"E","\u00C8":"E","\u00C9":"E","\u00CA":"E","\u1EC0":"E","\u1EBE":"E","\u1EC4":"E","\u1EC2":"E","\u1EBC":"E","\u0112":"E","\u1E14":"E","\u1E16":"E","\u0114":"E","\u0116":"E","\u00CB":"E","\u1EBA":"E","\u011A":"E","\u0204":"E","\u0206":"E","\u1EB8":"E","\u1EC6":"E","\u0228":"E","\u1E1C":"E","\u0118":"E","\u1E18":"E","\u1E1A":"E","\u0190":"E","\u018E":"E","\u24BB":"F","\uFF26":"F","\u1E1E":"F","\u0191":"F","\uA77B":"F","\u24BC":"G","\uFF27":"G","\u01F4":"G","\u011C":"G","\u1E20":"G","\u011E":"G","\u0120":"G","\u01E6":"G","\u0122":"G","\u01E4":"G","\u0193":"G","\uA7A0":"G","\uA77D":"G","\uA77E":"G","\u24BD":"H","\uFF28":"H","\u0124":"H","\u1E22":"H","\u1E26":"H","\u021E":"H","\u1E24":"H","\u1E28":"H","\u1E2A":"H","\u0126":"H","\u2C67":"H","\u2C75":"H","\uA78D":"H","\u24BE":"I","\uFF29":"I","\u00CC":"I","\u00CD":"I","\u00CE":"I","\u0128":"I","\u012A":"I","\u012C":"I","\u0130":"I","\u00CF":"I","\u1E2E":"I","\u1EC8":"I","\u01CF":"I","\u0208":"I","\u020A":"I","\u1ECA":"I","\u012E":"I","\u1E2C":"I","\u0197":"I","\u24BF":"J","\uFF2A":"J","\u0134":"J","\u0248":"J","\u24C0":"K","\uFF2B":"K","\u1E30":"K","\u01E8":"K","\u1E32":"K","\u0136":"K","\u1E34":"K","\u0198":"K","\u2C69":"K","\uA740":"K","\uA742":"K","\uA744":"K","\uA7A2":"K","\u24C1":"L","\uFF2C":"L","\u013F":"L","\u0139":"L","\u013D":"L","\u1E36":"L","\u1E38":"L","\u013B":"L","\u1E3C":"L","\u1E3A":"L","\u0141":"L","\u023D":"L","\u2C62":"L","\u2C60":"L","\uA748":"L","\uA746":"L","\uA780":"L","\u01C7":"LJ","\u01C8":"Lj","\u24C2":"M","\uFF2D":"M","\u1E3E":"M","\u1E40":"M","\u1E42":"M","\u2C6E":"M","\u019C":"M","\u24C3":"N","\uFF2E":"N","\u01F8":"N","\u0143":"N","\u00D1":"N","\u1E44":"N","\u0147":"N","\u1E46":"N","\u0145":"N","\u1E4A":"N","\u1E48":"N","\u0220":"N","\u019D":"N","\uA790":"N","\uA7A4":"N","\u01CA":"NJ","\u01CB":"Nj","\u24C4":"O","\uFF2F":"O","\u00D2":"O","\u00D3":"O","\u00D4":"O","\u1ED2":"O","\u1ED0":"O","\u1ED6":"O","\u1ED4":"O","\u00D5":"O","\u1E4C":"O","\u022C":"O","\u1E4E":"O","\u014C":"O","\u1E50":"O","\u1E52":"O","\u014E":"O","\u022E":"O","\u0230":"O","\u00D6":"O","\u022A":"O","\u1ECE":"O","\u0150":"O","\u01D1":"O","\u020C":"O","\u020E":"O","\u01A0":"O","\u1EDC":"O","\u1EDA":"O","\u1EE0":"O","\u1EDE":"O","\u1EE2":"O","\u1ECC":"O","\u1ED8":"O","\u01EA":"O","\u01EC":"O","\u00D8":"O","\u01FE":"O","\u0186":"O","\u019F":"O","\uA74A":"O","\uA74C":"O","\u01A2":"OI","\uA74E":"OO","\u0222":"OU","\u24C5":"P","\uFF30":"P","\u1E54":"P","\u1E56":"P","\u01A4":"P","\u2C63":"P","\uA750":"P","\uA752":"P","\uA754":"P","\u24C6":"Q","\uFF31":"Q","\uA756":"Q","\uA758":"Q","\u024A":"Q","\u24C7":"R","\uFF32":"R","\u0154":"R","\u1E58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1E5A":"R","\u1E5C":"R","\u0156":"R","\u1E5E":"R","\u024C":"R","\u2C64":"R","\uA75A":"R","\uA7A6":"R","\uA782":"R","\u24C8":"S","\uFF33":"S","\u1E9E":"S","\u015A":"S","\u1E64":"S","\u015C":"S","\u1E60":"S","\u0160":"S","\u1E66":"S","\u1E62":"S","\u1E68":"S","\u0218":"S","\u015E":"S","\u2C7E":"S","\uA7A8":"S","\uA784":"S","\u24C9":"T","\uFF34":"T","\u1E6A":"T","\u0164":"T","\u1E6C":"T","\u021A":"T","\u0162":"T","\u1E70":"T","\u1E6E":"T","\u0166":"T","\u01AC":"T","\u01AE":"T","\u023E":"T","\uA786":"T","\uA728":"TZ","\u24CA":"U","\uFF35":"U","\u00D9":"U","\u00DA":"U","\u00DB":"U","\u0168":"U","\u1E78":"U","\u016A":"U","\u1E7A":"U","\u016C":"U","\u00DC":"U","\u01DB":"U","\u01D7":"U","\u01D5":"U","\u01D9":"U","\u1EE6":"U","\u016E":"U","\u0170":"U","\u01D3":"U","\u0214":"U","\u0216":"U","\u01AF":"U","\u1EEA":"U","\u1EE8":"U","\u1EEE":"U","\u1EEC":"U","\u1EF0":"U","\u1EE4":"U","\u1E72":"U","\u0172":"U","\u1E76":"U","\u1E74":"U","\u0244":"U","\u24CB":"V","\uFF36":"V","\u1E7C":"V","\u1E7E":"V","\u01B2":"V","\uA75E":"V","\u0245":"V","\uA760":"VY","\u24CC":"W","\uFF37":"W","\u1E80":"W","\u1E82":"W","\u0174":"W","\u1E86":"W","\u1E84":"W","\u1E88":"W","\u2C72":"W","\u24CD":"X","\uFF38":"X","\u1E8A":"X","\u1E8C":"X","\u24CE":"Y","\uFF39":"Y","\u1EF2":"Y","\u00DD":"Y","\u0176":"Y","\u1EF8":"Y","\u0232":"Y","\u1E8E":"Y","\u0178":"Y","\u1EF6":"Y","\u1EF4":"Y","\u01B3":"Y","\u024E":"Y","\u1EFE":"Y","\u24CF":"Z","\uFF3A":"Z","\u0179":"Z","\u1E90":"Z","\u017B":"Z","\u017D":"Z","\u1E92":"Z","\u1E94":"Z","\u01B5":"Z","\u0224":"Z","\u2C7F":"Z","\u2C6B":"Z","\uA762":"Z","\u24D0":"a","\uFF41":"a","\u1E9A":"a","\u00E0":"a","\u00E1":"a","\u00E2":"a","\u1EA7":"a","\u1EA5":"a","\u1EAB":"a","\u1EA9":"a","\u00E3":"a","\u0101":"a","\u0103":"a","\u1EB1":"a","\u1EAF":"a","\u1EB5":"a","\u1EB3":"a","\u0227":"a","\u01E1":"a","\u00E4":"a","\u01DF":"a","\u1EA3":"a","\u00E5":"a","\u01FB":"a","\u01CE":"a","\u0201":"a","\u0203":"a","\u1EA1":"a","\u1EAD":"a","\u1EB7":"a","\u1E01":"a","\u0105":"a","\u2C65":"a","\u0250":"a","\uA733":"aa","\u00E6":"ae","\u01FD":"ae","\u01E3":"ae","\uA735":"ao","\uA737":"au","\uA739":"av","\uA73B":"av","\uA73D":"ay","\u24D1":"b","\uFF42":"b","\u1E03":"b","\u1E05":"b","\u1E07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24D2":"c","\uFF43":"c","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u00E7":"c","\u1E09":"c","\u0188":"c","\u023C":"c","\uA73F":"c","\u2184":"c","\u24D3":"d","\uFF44":"d","\u1E0B":"d","\u010F":"d","\u1E0D":"d","\u1E11":"d","\u1E13":"d","\u1E0F":"d","\u0111":"d","\u018C":"d","\u0256":"d","\u0257":"d","\uA77A":"d","\u01F3":"dz","\u01C6":"dz","\u24D4":"e","\uFF45":"e","\u00E8":"e","\u00E9":"e","\u00EA":"e","\u1EC1":"e","\u1EBF":"e","\u1EC5":"e","\u1EC3":"e","\u1EBD":"e","\u0113":"e","\u1E15":"e","\u1E17":"e","\u0115":"e","\u0117":"e","\u00EB":"e","\u1EBB":"e","\u011B":"e","\u0205":"e","\u0207":"e","\u1EB9":"e","\u1EC7":"e","\u0229":"e","\u1E1D":"e","\u0119":"e","\u1E19":"e","\u1E1B":"e","\u0247":"e","\u025B":"e","\u01DD":"e","\u24D5":"f","\uFF46":"f","\u1E1F":"f","\u0192":"f","\uA77C":"f","\u24D6":"g","\uFF47":"g","\u01F5":"g","\u011D":"g","\u1E21":"g","\u011F":"g","\u0121":"g","\u01E7":"g","\u0123":"g","\u01E5":"g","\u0260":"g","\uA7A1":"g","\u1D79":"g","\uA77F":"g","\u24D7":"h","\uFF48":"h","\u0125":"h","\u1E23":"h","\u1E27":"h","\u021F":"h","\u1E25":"h","\u1E29":"h","\u1E2B":"h","\u1E96":"h","\u0127":"h","\u2C68":"h","\u2C76":"h","\u0265":"h","\u0195":"hv","\u24D8":"i","\uFF49":"i","\u00EC":"i","\u00ED":"i","\u00EE":"i","\u0129":"i","\u012B":"i","\u012D":"i","\u00EF":"i","\u1E2F":"i","\u1EC9":"i","\u01D0":"i","\u0209":"i","\u020B":"i","\u1ECB":"i","\u012F":"i","\u1E2D":"i","\u0268":"i","\u0131":"i","\u24D9":"j","\uFF4A":"j","\u0135":"j","\u01F0":"j","\u0249":"j","\u24DA":"k","\uFF4B":"k","\u1E31":"k","\u01E9":"k","\u1E33":"k","\u0137":"k","\u1E35":"k","\u0199":"k","\u2C6A":"k","\uA741":"k","\uA743":"k","\uA745":"k","\uA7A3":"k","\u24DB":"l","\uFF4C":"l","\u0140":"l","\u013A":"l","\u013E":"l","\u1E37":"l","\u1E39":"l","\u013C":"l","\u1E3D":"l","\u1E3B":"l","\u017F":"l","\u0142":"l","\u019A":"l","\u026B":"l","\u2C61":"l","\uA749":"l","\uA781":"l","\uA747":"l","\u01C9":"lj","\u24DC":"m","\uFF4D":"m","\u1E3F":"m","\u1E41":"m","\u1E43":"m","\u0271":"m","\u026F":"m","\u24DD":"n","\uFF4E":"n","\u01F9":"n","\u0144":"n","\u00F1":"n","\u1E45":"n","\u0148":"n","\u1E47":"n","\u0146":"n","\u1E4B":"n","\u1E49":"n","\u019E":"n","\u0272":"n","\u0149":"n","\uA791":"n","\uA7A5":"n","\u01CC":"nj","\u24DE":"o","\uFF4F":"o","\u00F2":"o","\u00F3":"o","\u00F4":"o","\u1ED3":"o","\u1ED1":"o","\u1ED7":"o","\u1ED5":"o","\u00F5":"o","\u1E4D":"o","\u022D":"o","\u1E4F":"o","\u014D":"o","\u1E51":"o","\u1E53":"o","\u014F":"o","\u022F":"o","\u0231":"o","\u00F6":"o","\u022B":"o","\u1ECF":"o","\u0151":"o","\u01D2":"o","\u020D":"o","\u020F":"o","\u01A1":"o","\u1EDD":"o","\u1EDB":"o","\u1EE1":"o","\u1EDF":"o","\u1EE3":"o","\u1ECD":"o","\u1ED9":"o","\u01EB":"o","\u01ED":"o","\u00F8":"o","\u01FF":"o","\u0254":"o","\uA74B":"o","\uA74D":"o","\u0275":"o","\u01A3":"oi","\u0223":"ou","\uA74F":"oo","\u24DF":"p","\uFF50":"p","\u1E55":"p","\u1E57":"p","\u01A5":"p","\u1D7D":"p","\uA751":"p","\uA753":"p","\uA755":"p","\u24E0":"q","\uFF51":"q","\u024B":"q","\uA757":"q","\uA759":"q","\u24E1":"r","\uFF52":"r","\u0155":"r","\u1E59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1E5B":"r","\u1E5D":"r","\u0157":"r","\u1E5F":"r","\u024D":"r","\u027D":"r","\uA75B":"r","\uA7A7":"r","\uA783":"r","\u24E2":"s","\uFF53":"s","\u00DF":"s","\u015B":"s","\u1E65":"s","\u015D":"s","\u1E61":"s","\u0161":"s","\u1E67":"s","\u1E63":"s","\u1E69":"s","\u0219":"s","\u015F":"s","\u023F":"s","\uA7A9":"s","\uA785":"s","\u1E9B":"s","\u24E3":"t","\uFF54":"t","\u1E6B":"t","\u1E97":"t","\u0165":"t","\u1E6D":"t","\u021B":"t","\u0163":"t","\u1E71":"t","\u1E6F":"t","\u0167":"t","\u01AD":"t","\u0288":"t","\u2C66":"t","\uA787":"t","\uA729":"tz","\u24E4":"u","\uFF55":"u","\u00F9":"u","\u00FA":"u","\u00FB":"u","\u0169":"u","\u1E79":"u","\u016B":"u","\u1E7B":"u","\u016D":"u","\u00FC":"u","\u01DC":"u","\u01D8":"u","\u01D6":"u","\u01DA":"u","\u1EE7":"u","\u016F":"u","\u0171":"u","\u01D4":"u","\u0215":"u","\u0217":"u","\u01B0":"u","\u1EEB":"u","\u1EE9":"u","\u1EEF":"u","\u1EED":"u","\u1EF1":"u","\u1EE5":"u","\u1E73":"u","\u0173":"u","\u1E77":"u","\u1E75":"u","\u0289":"u","\u24E5":"v","\uFF56":"v","\u1E7D":"v","\u1E7F":"v","\u028B":"v","\uA75F":"v","\u028C":"v","\uA761":"vy","\u24E6":"w","\uFF57":"w","\u1E81":"w","\u1E83":"w","\u0175":"w","\u1E87":"w","\u1E85":"w","\u1E98":"w","\u1E89":"w","\u2C73":"w","\u24E7":"x","\uFF58":"x","\u1E8B":"x","\u1E8D":"x","\u24E8":"y","\uFF59":"y","\u1EF3":"y","\u00FD":"y","\u0177":"y","\u1EF9":"y","\u0233":"y","\u1E8F":"y","\u00FF":"y","\u1EF7":"y","\u1E99":"y","\u1EF5":"y","\u01B4":"y","\u024F":"y","\u1EFF":"y","\u24E9":"z","\uFF5A":"z","\u017A":"z","\u1E91":"z","\u017C":"z","\u017E":"z","\u1E93":"z","\u1E95":"z","\u01B6":"z","\u0225":"z","\u0240":"z","\u2C6C":"z","\uA763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038A":"\u0399","\u03AA":"\u0399","\u038C":"\u039F","\u038E":"\u03A5","\u03AB":"\u03A5","\u038F":"\u03A9","\u03AC":"\u03B1","\u03AD":"\u03B5","\u03AE":"\u03B7","\u03AF":"\u03B9","\u03CA":"\u03B9","\u0390":"\u03B9","\u03CC":"\u03BF","\u03CD":"\u03C5","\u03CB":"\u03C5","\u03B0":"\u03C5","\u03C9":"\u03C9","\u03C2":"\u03C3"}; $document=$(document); nextUid=(function(){ var counter=1; return function(){ return counter++; };}()); function reinsertElement(element){ var placeholder=$(document.createTextNode('')); element.before(placeholder); placeholder.before(element); placeholder.remove(); } function stripDiacritics(str){ function match(a){ return DIACRITICS[a]||a; } return str.replace(/[^\u0000-\u007E]/g, match); } function indexOf(value, array){ var i=0, l=array.length; for (; i < l; i=i + 1){ if(equal(value, array[i])) return i; } return -1; } function measureScrollbar (){ var $template=$(MEASURE_SCROLLBAR_TEMPLATE); $template.appendTo('body'); var dim={ width: $template.width() - $template[0].clientWidth, height: $template.height() - $template[0].clientHeight }; $template.remove(); return dim; } function equal(a, b){ if(a===b) return true; if(a===undefined||b===undefined) return false; if(a===null||b===null) return false; if(a.constructor===String) return a+''===b+''; if(b.constructor===String) return b+''===a+''; return false; } function splitVal(string, separator){ var val, i, l; if(string===null||string.length < 1) return []; val=string.split(separator); for (i=0, l=val.length; i < l; i=i + 1) val[i]=$.trim(val[i]); return val; } function getSideBorderPadding(element){ return element.outerWidth(false) - element.width(); } function installKeyUpChangeEvent(element){ var key="keyup-change-value"; element.on("keydown", function (){ if($.data(element, key)===undefined){ $.data(element, key, element.val()); }}); element.on("keyup", function (){ var val=$.data(element, key); if(val!==undefined&&element.val()!==val){ $.removeData(element, key); element.trigger("keyup-change"); }}); } function installFilteredMouseMove(element){ element.on("mousemove", function (e){ var lastpos=lastMousePosition; if(lastpos===undefined||lastpos.x!==e.pageX||lastpos.y!==e.pageY){ $(e.target).trigger("mousemove-filtered", e); }}); } function debounce(quietMillis, fn, ctx){ ctx=ctx||undefined; var timeout; return function (){ var args=arguments; window.clearTimeout(timeout); timeout=window.setTimeout(function(){ fn.apply(ctx, args); }, quietMillis); };} function installDebouncedScroll(threshold, element){ var notify=debounce(threshold, function (e){ element.trigger("scroll-debounced", e);}); element.on("scroll", function (e){ if(indexOf(e.target, element.get()) >=0) notify(e); }); } function focus($el){ if($el[0]===document.activeElement) return; window.setTimeout(function(){ var el=$el[0], pos=$el.val().length, range; $el.focus(); var isVisible=(el.offsetWidth > 0||el.offsetHeight > 0); if(isVisible&&el===document.activeElement){ if(el.setSelectionRange){ el.setSelectionRange(pos, pos); } else if(el.createTextRange){ range=el.createTextRange(); range.collapse(false); range.select(); }} }, 0); } function getCursorInfo(el){ el=$(el)[0]; var offset=0; var length=0; if('selectionStart' in el){ offset=el.selectionStart; length=el.selectionEnd - offset; }else if('selection' in document){ el.focus(); var sel=document.selection.createRange(); length=document.selection.createRange().text.length; sel.moveStart('character', -el.value.length); offset=sel.text.length - length; } return { offset: offset, length: length };} function killEvent(event){ event.preventDefault(); event.stopPropagation(); } function killEventImmediately(event){ event.preventDefault(); event.stopImmediatePropagation(); } function measureTextWidth(e){ if(!sizer){ var style=e[0].currentStyle||window.getComputedStyle(e[0], null); sizer=$(document.createElement("div")).css({ position: "absolute", left: "-10000px", top: "-10000px", display: "none", fontSize: style.fontSize, fontFamily: style.fontFamily, fontStyle: style.fontStyle, fontWeight: style.fontWeight, letterSpacing: style.letterSpacing, textTransform: style.textTransform, whiteSpace: "nowrap" }); sizer.attr("class","select2-sizer"); $("body").append(sizer); } sizer.text(e.val()); return sizer.width(); } function syncCssClasses(dest, src, adapter){ var classes, replacements=[], adapted; classes=$.trim(dest.attr("class")); if(classes){ classes='' + classes; $(classes.split(/\s+/)).each2(function(){ if(this.indexOf("select2-")===0){ replacements.push(this); }}); } classes=$.trim(src.attr("class")); if(classes){ classes='' + classes; $(classes.split(/\s+/)).each2(function(){ if(this.indexOf("select2-")!==0){ adapted=adapter(this); if(adapted){ replacements.push(adapted); }} }); } dest.attr("class", replacements.join(" ")); } function markMatch(text, term, markup, escapeMarkup){ var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())), tl=term.length; if(match<0){ markup.push(escapeMarkup(text)); return; } markup.push(escapeMarkup(text.substring(0, match))); markup.push(""); markup.push(escapeMarkup(text.substring(match, match + tl))); markup.push(""); markup.push(escapeMarkup(text.substring(match + tl, text.length))); } function defaultEscapeMarkup(markup){ var replace_map={ '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', "/": '/' }; return String(markup).replace(/[&<>"'\/\\]/g, function (match){ return replace_map[match]; }); } /** * Produces an ajax-based query function * * @param options object containing configuration parameters * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax * @param options.url url for the data * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2. * The expected format is an object containing the following keys: * results array of objects that will be used as choices * more (optional) boolean indicating whether there are more results available * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} */ function ajax(options){ var timeout, handler=null, quietMillis=options.quietMillis||100, ajaxUrl=options.url, self=this; return function (query){ window.clearTimeout(timeout); timeout=window.setTimeout(function (){ var data=options.data, url=ajaxUrl, transport=options.transport||$.fn.select2.ajaxDefaults.transport, deprecated={ type: options.type||'GET', cache: options.cache||false, jsonpCallback: options.jsonpCallback||undefined, dataType: options.dataType||"json" }, params=$.extend({}, $.fn.select2.ajaxDefaults.params, deprecated); data=data ? data.call(self, query.term, query.page, query.context):null; url=(typeof url==='function') ? url.call(self, query.term, query.page, query.context):url; if(handler&&typeof handler.abort==="function"){ handler.abort(); } if(options.params){ if($.isFunction(options.params)){ $.extend(params, options.params.call(self)); }else{ $.extend(params, options.params); }} $.extend(params, { url: url, dataType: options.dataType, data: data, success: function (data){ var results=options.results(data, query.page, query); query.callback(results); }, error: function(jqXHR, textStatus, errorThrown){ var results={ hasError: true, jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown, }; query.callback(results); }}); handler=transport.call(self, params); }, quietMillis); };} /** * Produces a query function that works with a local array * * @param options object containing configuration parameters. The options parameter can either be an array or an * object. * * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. * * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' * key can either be a String in which case it is expected that each element in the 'data' array has a key with the * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract * the text. */ function local(options){ var data=options, dataText, tmp, text=function (item){ return ""+item.text; }; if($.isArray(data)){ tmp=data; data={ results: tmp };} if($.isFunction(data)===false){ tmp=data; data=function(){ return tmp; };} var dataItem=data(); if(dataItem.text){ text=dataItem.text; if(!$.isFunction(text)){ dataText=dataItem.text; text=function (item){ return item[dataText]; };}} return function (query){ var t=query.term, filtered={ results: [] }, process; if(t===""){ query.callback(data()); return; } process=function(datum, collection){ var group, attr; datum=datum[0]; if(datum.children){ group={}; for (attr in datum){ if(datum.hasOwnProperty(attr)) group[attr]=datum[attr]; } group.children=[]; $(datum.children).each2(function(i, childDatum){ process(childDatum, group.children); }); if(group.children.length||query.matcher(t, text(group), datum)){ collection.push(group); }}else{ if(query.matcher(t, text(datum), datum)){ collection.push(datum); }} }; $(data().results).each2(function(i, datum){ process(datum, filtered.results); }); query.callback(filtered); };} function tags(data){ var isFunc=$.isFunction(data); return function (query){ var t=query.term, filtered={results: []}; var result=isFunc ? data(query):data; if($.isArray(result)){ $(result).each(function (){ var isObject=this.text!==undefined, text=isObject ? this.text:this; if(t===""||query.matcher(t, text)){ filtered.results.push(isObject ? this:{id: this, text: this}); }}); query.callback(filtered); }};} function checkFormatter(formatter, formatterName){ if($.isFunction(formatter)) return true; if(!formatter) return false; if(typeof(formatter)==='string') return true; throw new Error(formatterName +" must be a string, function, or falsy value"); } function evaluate(val, context){ if($.isFunction(val)){ var args=Array.prototype.slice.call(arguments, 2); return val.apply(context, args); } return val; } function countResults(results){ var count=0; $.each(results, function(i, item){ if(item.children){ count +=countResults(item.children); }else{ count++; }}); return count; } /** * Default tokenizer. This function uses breaks the input on substring match of any string from the * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those * two options have to be defined in order for the tokenizer to work. * * @param input text user has typed so far or pasted into the search field * @param selection currently selected choices * @param selectCallback function(choice) callback tho add the choice to selection * @param opts select2's opts * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value */ function defaultTokenizer(input, selection, selectCallback, opts){ var original=input, dupe=false, token, index, i, l, separator; if(!opts.createSearchChoice||!opts.tokenSeparators||opts.tokenSeparators.length < 1) return undefined; while (true){ index=-1; for (i=0, l=opts.tokenSeparators.length; i < l; i++){ separator=opts.tokenSeparators[i]; index=input.indexOf(separator); if(index >=0) break; } if(index < 0) break; token=input.substring(0, index); input=input.substring(index + separator.length); if(token.length > 0){ token=opts.createSearchChoice.call(this, token, selection); if(token!==undefined&&token!==null&&opts.id(token)!==undefined&&opts.id(token)!==null){ dupe=false; for (i=0, l=selection.length; i < l; i++){ if(equal(opts.id(token), opts.id(selection[i]))){ dupe=true; break; }} if(!dupe) selectCallback(token); }} } if(original!==input) return input; } function cleanupJQueryElements(){ var self=this; $.each(arguments, function (i, element){ self[element].remove(); self[element]=null; }); } function clazz(SuperClass, methods){ var constructor=function (){}; constructor.prototype=new SuperClass; constructor.prototype.constructor=constructor; constructor.prototype.parent=SuperClass.prototype; constructor.prototype=$.extend(constructor.prototype, methods); return constructor; } AbstractSelect2=clazz(Object, { bind: function (func){ var self=this; return function (){ func.apply(self, arguments); };}, init: function (opts){ var results, search, resultsSelector=".select2-results"; this.opts=opts=this.prepareOpts(opts); this.id=opts.id; if(opts.element.data("select2")!==undefined && opts.element.data("select2")!==null){ opts.element.data("select2").destroy(); } this.container=this.createContainer(); this.liveRegion=$("", { role: "status", "aria-live": "polite" }) .addClass("select2-hidden-accessible") .appendTo(document.body); this.containerId="s2id_"+(opts.element.attr("id")||"autogen"+nextUid()); this.containerEventName=this.containerId .replace(/([.])/g, '_') .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); this.container.attr("id", this.containerId); this.container.attr("title", opts.element.attr("title")); this.body=$("body"); syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); this.container.attr("style", opts.element.attr("style")); this.container.css(evaluate(opts.containerCss, this.opts.element)); this.container.addClass(evaluate(opts.containerCssClass, this.opts.element)); this.elementTabIndex=this.opts.element.attr("tabindex"); this.opts.element .data("select2", this) .attr("tabindex", "-1") .before(this.container) .on("click.select2", killEvent); this.container.data("select2", this); this.dropdown=this.container.find(".select2-drop"); syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass); this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element)); this.dropdown.data("select2", this); this.dropdown.on("click", killEvent); this.results=results=this.container.find(resultsSelector); this.search=search=this.container.find("input.select2-input"); this.queryCount=0; this.resultsPage=0; this.context=null; this.initContainer(); this.container.on("click", killEvent); installFilteredMouseMove(this.results); this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent)); this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event){ this._touchEvent=true; this.highlightUnderEvent(event); })); this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved)); this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); this.dropdown.on('click', this.bind(function (event){ if(this._touchEvent){ this._touchEvent=false; this.selectHighlighted(); }})); installDebouncedScroll(80, this.results); this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); $(this.container).on("change", ".select2-input", function(e){e.stopPropagation();}); $(this.dropdown).on("change", ".select2-input", function(e){e.stopPropagation();}); if($.fn.mousewheel){ results.mousewheel(function (e, delta, deltaX, deltaY){ var top=results.scrollTop(); if(deltaY > 0&&top - deltaY <=0){ results.scrollTop(0); killEvent(e); }else if(deltaY < 0&&results.get(0).scrollHeight - results.scrollTop() + deltaY <=results.height()){ results.scrollTop(results.get(0).scrollHeight - results.height()); killEvent(e); }}); } installKeyUpChangeEvent(search); search.on("keyup-change input paste", this.bind(this.updateResults)); search.on("focus", function (){ search.addClass("select2-focused"); }); search.on("blur", function (){ search.removeClass("select2-focused");}); this.dropdown.on("mouseup", resultsSelector, this.bind(function (e){ if($(e.target).closest(".select2-result-selectable").length > 0){ this.highlightUnderEvent(e); this.selectHighlighted(e); }})); this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e){ e.stopPropagation(); }); this.nextSearchTerm=undefined; if($.isFunction(this.opts.initSelection)){ this.initSelection(); this.monitorSource(); } if(opts.maximumInputLength!==null){ this.search.attr("maxlength", opts.maximumInputLength); } var disabled=opts.element.prop("disabled"); if(disabled===undefined) disabled=false; this.enable(!disabled); var readonly=opts.element.prop("readonly"); if(readonly===undefined) readonly=false; this.readonly(readonly); scrollBarDimensions=scrollBarDimensions||measureScrollbar(); this.autofocus=opts.element.prop("autofocus"); opts.element.prop("autofocus", false); if(this.autofocus) this.focus(); this.search.attr("placeholder", opts.searchInputPlaceholder); }, destroy: function (){ var element=this.opts.element, select2=element.data("select2"), self=this; this.close(); if(element.length&&element[0].detachEvent){ element.each(function (){ this.detachEvent("onpropertychange", self._sync); }); } if(this.propertyObserver){ this.propertyObserver.disconnect(); this.propertyObserver=null; } this._sync=null; if(select2!==undefined){ select2.container.remove(); select2.liveRegion.remove(); select2.dropdown.remove(); element .removeClass("select2-offscreen") .removeData("select2") .off(".select2") .prop("autofocus", this.autofocus||false); if(this.elementTabIndex){ element.attr({tabindex: this.elementTabIndex}); }else{ element.removeAttr("tabindex"); } element.show(); } cleanupJQueryElements.call(this, "container", "liveRegion", "dropdown", "results", "search" ); }, optionToData: function(element){ if(element.is("option")){ return { id:element.prop("value"), text:element.text(), element: element.get(), css: element.attr("class"), disabled: element.prop("disabled"), locked: equal(element.attr("locked"), "locked")||equal(element.data("locked"), true) };}else if(element.is("optgroup")){ return { text:element.attr("label"), children:[], element: element.get(), css: element.attr("class") };}}, prepareOpts: function (opts){ var element, select, idKey, ajaxUrl, self=this; element=opts.element; if(element.get(0).tagName.toLowerCase()==="select"){ this.select=select=opts.element; } if(select){ $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function (){ if(this in opts){ throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a ", "
", " ", "
    ", "
", "
"].join("")); return container; }, enableInterface: function(){ if(this.parent.enableInterface.apply(this, arguments)){ this.focusser.prop("disabled", !this.isInterfaceEnabled()); }}, opening: function (){ var el, range, len; if(this.opts.minimumResultsForSearch >=0){ this.showSearch(true); } this.parent.opening.apply(this, arguments); if(this.showSearchInput!==false){ this.search.val(this.focusser.val()); } if(this.opts.shouldFocusInput(this)){ this.search.focus(); el=this.search.get(0); if(el.createTextRange){ range=el.createTextRange(); range.collapse(false); range.select(); }else if(el.setSelectionRange){ len=this.search.val().length; el.setSelectionRange(len, len); }} if(this.search.val()===""){ if(this.nextSearchTerm!=undefined){ this.search.val(this.nextSearchTerm); this.search.select(); }} this.focusser.prop("disabled", true).val(""); this.updateResults(true); this.opts.element.trigger($.Event("select2-open")); }, close: function (){ if(!this.opened()) return; this.parent.close.apply(this, arguments); this.focusser.prop("disabled", false); if(this.opts.shouldFocusInput(this)){ this.focusser.focus(); }}, focus: function (){ if(this.opened()){ this.close(); }else{ this.focusser.prop("disabled", false); if(this.opts.shouldFocusInput(this)){ this.focusser.focus(); }} }, isFocused: function (){ return this.container.hasClass("select2-container-active"); }, cancel: function (){ this.parent.cancel.apply(this, arguments); this.focusser.prop("disabled", false); if(this.opts.shouldFocusInput(this)){ this.focusser.focus(); }}, destroy: function(){ $("label[for='" + this.focusser.attr('id') + "']") .attr('for', this.opts.element.attr("id")); this.parent.destroy.apply(this, arguments); cleanupJQueryElements.call(this, "selection", "focusser" ); }, initContainer: function (){ var selection, container=this.container, dropdown=this.dropdown, idSuffix=nextUid(), elementLabel; if(this.opts.minimumResultsForSearch < 0){ this.showSearch(false); }else{ this.showSearch(true); } this.selection=selection=container.find(".select2-choice"); this.focusser=container.find(".select2-focusser"); selection.find(".select2-chosen").attr("id", "select2-chosen-"+idSuffix); this.focusser.attr("aria-labelledby", "select2-chosen-"+idSuffix); this.results.attr("id", "select2-results-"+idSuffix); this.search.attr("aria-owns", "select2-results-"+idSuffix); this.focusser.attr("id", "s2id_autogen"+idSuffix); elementLabel=$("label[for='" + this.opts.element.attr("id") + "']"); this.focusser.prev() .text(elementLabel.text()) .attr('for', this.focusser.attr('id')); var originalTitle=this.opts.element.attr("title"); this.opts.element.attr("title", (originalTitle||elementLabel.text())); this.focusser.attr("tabindex", this.elementTabIndex); this.search.attr("id", this.focusser.attr('id') + '_search'); this.search.prev() .text($("label[for='" + this.focusser.attr('id') + "']").text()) .attr('for', this.search.attr('id')); this.search.on("keydown", this.bind(function (e){ if(!this.isInterfaceEnabled()) return; if(229==e.keyCode) return; if(e.which===KEY.PAGE_UP||e.which===KEY.PAGE_DOWN){ killEvent(e); return; } switch (e.which){ case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which===KEY.UP) ? -1:1); killEvent(e); return; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return; case KEY.TAB: this.selectHighlighted({noFocus: true}); return; case KEY.ESC: this.cancel(e); killEvent(e); return; }})); this.search.on("blur", this.bind(function(e){ if(document.activeElement===this.body.get(0)){ window.setTimeout(this.bind(function(){ if(this.opened()){ this.search.focus(); }}), 0); }})); this.focusser.on("keydown", this.bind(function (e){ if(!this.isInterfaceEnabled()) return; if(e.which===KEY.TAB||KEY.isControl(e)||KEY.isFunctionKey(e)||e.which===KEY.ESC){ return; } if(this.opts.openOnEnter===false&&e.which===KEY.ENTER){ killEvent(e); return; } if(e.which==KEY.DOWN||e.which==KEY.UP || (e.which==KEY.ENTER&&this.opts.openOnEnter)){ if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey) return; this.open(); killEvent(e); return; } if(e.which==KEY.DELETE||e.which==KEY.BACKSPACE){ if(this.opts.allowClear){ this.clear(); } killEvent(e); return; }})); installKeyUpChangeEvent(this.focusser); this.focusser.on("keyup-change input", this.bind(function(e){ if(this.opts.minimumResultsForSearch >=0){ e.stopPropagation(); if(this.opened()) return; this.open(); }})); selection.on("mousedown touchstart", "abbr", this.bind(function (e){ if(!this.isInterfaceEnabled()) return; this.clear(); killEventImmediately(e); this.close(); this.selection.focus(); })); selection.on("mousedown touchstart", this.bind(function (e){ reinsertElement(selection); if(!this.container.hasClass("select2-container-active")){ this.opts.element.trigger($.Event("select2-focus")); } if(this.opened()){ this.close(); }else if(this.isInterfaceEnabled()){ this.open(); } killEvent(e); })); dropdown.on("mousedown touchstart", this.bind(function(){ if(this.opts.shouldFocusInput(this)){ this.search.focus(); }})); selection.on("focus", this.bind(function(e){ killEvent(e); })); this.focusser.on("focus", this.bind(function(){ if(!this.container.hasClass("select2-container-active")){ this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); })).on("blur", this.bind(function(){ if(!this.opened()){ this.container.removeClass("select2-container-active"); this.opts.element.trigger($.Event("select2-blur")); }})); this.search.on("focus", this.bind(function(){ if(!this.container.hasClass("select2-container-active")){ this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); })); this.initContainerWidth(); this.opts.element.addClass("select2-offscreen"); this.setPlaceholder(); }, clear: function(triggerChange){ var data=this.selection.data("select2-data"); if(data){ var evt=$.Event("select2-clearing"); this.opts.element.trigger(evt); if(evt.isDefaultPrevented()){ return; } var placeholderOption=this.getPlaceholderOption(); this.opts.element.val(placeholderOption ? placeholderOption.val():""); this.selection.find(".select2-chosen").empty(); this.selection.removeData("select2-data"); this.setPlaceholder(); if(triggerChange!==false){ this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); this.triggerChange({removed:data}); }} }, initSelection: function (){ var selected; if(this.isPlaceholderOptionSelected()){ this.updateSelection(null); this.close(); this.setPlaceholder(); }else{ var self=this; this.opts.initSelection.call(null, this.opts.element, function(selected){ if(selected!==undefined&&selected!==null){ self.updateSelection(selected); self.close(); self.setPlaceholder(); self.nextSearchTerm=self.opts.nextSearchTerm(selected, self.search.val()); }}); }}, isPlaceholderOptionSelected: function(){ var placeholderOption; if(this.getPlaceholder()===undefined) return false; return ((placeholderOption=this.getPlaceholderOption())!==undefined&&placeholderOption.prop("selected")) || (this.opts.element.val()==="") || (this.opts.element.val()===undefined) || (this.opts.element.val()===null); }, prepareOpts: function (){ var opts=this.parent.prepareOpts.apply(this, arguments), self=this; if(opts.element.get(0).tagName.toLowerCase()==="select"){ opts.initSelection=function (element, callback){ var selected=element.find("option").filter(function(){ return this.selected&&!this.disabled }); callback(self.optionToData(selected)); };}else if("data" in opts){ opts.initSelection=opts.initSelection||function (element, callback){ var id=element.val(); var match=null; opts.query({ matcher: function(term, text, el){ var is_match=equal(id, opts.id(el)); if(is_match){ match=el; } return is_match; }, callback: !$.isFunction(callback) ? $.noop:function(){ callback(match); }}); };} return opts; }, getPlaceholder: function(){ if(this.select){ if(this.getPlaceholderOption()===undefined){ return undefined; }} return this.parent.getPlaceholder.apply(this, arguments); }, setPlaceholder: function (){ var placeholder=this.getPlaceholder(); if(this.isPlaceholderOptionSelected()&&placeholder!==undefined){ if(this.select&&this.getPlaceholderOption()===undefined) return; this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder)); this.selection.addClass("select2-default"); this.container.removeClass("select2-allowclear"); }}, postprocessResults: function (data, initial, noHighlightUpdate){ var selected=0, self=this, showSearchInput=true; this.findHighlightableChoices().each2(function (i, elm){ if(equal(self.id(elm.data("select2-data")), self.opts.element.val())){ selected=i; return false; }}); if(noHighlightUpdate!==false){ if(initial===true&&selected >=0){ this.highlight(selected); }else{ this.highlight(0); }} if(initial===true){ var min=this.opts.minimumResultsForSearch; if(min >=0){ this.showSearch(countResults(data.results) >=min); }} }, showSearch: function(showSearchInput){ if(this.showSearchInput===showSearchInput) return; this.showSearchInput=showSearchInput; this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput); this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput); $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput); }, onSelect: function (data, options){ if(!this.triggerSelect(data)){ return; } var old=this.opts.element.val(), oldData=this.data(); this.opts.element.val(this.id(data)); this.updateSelection(data); this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data }); this.nextSearchTerm=this.opts.nextSearchTerm(data, this.search.val()); this.close(); if((!options||!options.noFocus)&&this.opts.shouldFocusInput(this)){ this.focusser.focus(); } if(!equal(old, this.id(data))){ this.triggerChange({ added: data, removed: oldData }); }}, updateSelection: function (data){ var container=this.selection.find(".select2-chosen"), formatted, cssClass; this.selection.data("select2-data", data); container.empty(); if(data!==null){ formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup); } if(formatted!==undefined){ container.append(formatted); } cssClass=this.opts.formatSelectionCssClass(data, container); if(cssClass!==undefined){ container.addClass(cssClass); } this.selection.removeClass("select2-default"); if(this.opts.allowClear&&this.getPlaceholder()!==undefined){ this.container.addClass("select2-allowclear"); }}, val: function (){ var val, triggerChange=false, data=null, self=this, oldData=this.data(); if(arguments.length===0){ return this.opts.element.val(); } val=arguments[0]; if(arguments.length > 1){ triggerChange=arguments[1]; } if(this.select){ this.select .val(val) .find("option").filter(function(){ return this.selected }).each2(function (i, elm){ data=self.optionToData(elm); return false; }); this.updateSelection(data); this.setPlaceholder(); if(triggerChange){ this.triggerChange({added: data, removed:oldData}); }}else{ if(!val&&val!==0){ this.clear(triggerChange); return; } if(this.opts.initSelection===undefined){ throw new Error("cannot call val() if initSelection() is not defined"); } this.opts.element.val(val); this.opts.initSelection(this.opts.element, function(data){ self.opts.element.val(!data ? "":self.id(data)); self.updateSelection(data); self.setPlaceholder(); if(triggerChange){ self.triggerChange({added: data, removed:oldData}); }}); }}, clearSearch: function (){ this.search.val(""); this.focusser.val(""); }, data: function(value){ var data, triggerChange=false; if(arguments.length===0){ data=this.selection.data("select2-data"); if(data==undefined) data=null; return data; }else{ if(arguments.length > 1){ triggerChange=arguments[1]; } if(!value){ this.clear(triggerChange); }else{ data=this.data(); this.opts.element.val(!value ? "":this.id(value)); this.updateSelection(value); if(triggerChange){ this.triggerChange({added: value, removed:data}); }} }} }); MultiSelect2=clazz(AbstractSelect2, { createContainer: function (){ var container=$(document.createElement("div")).attr({ "class": "select2-container select2-container-multi" }).html([ "
    ", "
  • ", " ", " ", "
  • ", "
", "
", "
    ", "
", "
"].join("")); return container; }, prepareOpts: function (){ var opts=this.parent.prepareOpts.apply(this, arguments), self=this; if(opts.element.get(0).tagName.toLowerCase()==="select"){ opts.initSelection=function (element, callback){ var data=[]; element.find("option").filter(function(){ return this.selected&&!this.disabled }).each2(function (i, elm){ data.push(self.optionToData(elm)); }); callback(data); };}else if("data" in opts){ opts.initSelection=opts.initSelection||function (element, callback){ var ids=splitVal(element.val(), opts.separator); var matches=[]; opts.query({ matcher: function(term, text, el){ var is_match=$.grep(ids, function(id){ return equal(id, opts.id(el)); }).length; if(is_match){ matches.push(el); } return is_match; }, callback: !$.isFunction(callback) ? $.noop:function(){ var ordered=[]; for (var i=0; i < ids.length; i++){ var id=ids[i]; for (var j=0; j < matches.length; j++){ var match=matches[j]; if(equal(id, opts.id(match))){ ordered.push(match); matches.splice(j, 1); break; }} } callback(ordered); }}); };} return opts; }, selectChoice: function (choice){ var selected=this.container.find(".select2-search-choice-focus"); if(selected.length&&choice&&choice[0]==selected[0]){ }else{ if(selected.length){ this.opts.element.trigger("choice-deselected", selected); } selected.removeClass("select2-search-choice-focus"); if(choice&&choice.length){ this.close(); choice.addClass("select2-search-choice-focus"); this.opts.element.trigger("choice-selected", choice); }} }, destroy: function(){ $("label[for='" + this.search.attr('id') + "']") .attr('for', this.opts.element.attr("id")); this.parent.destroy.apply(this, arguments); cleanupJQueryElements.call(this, "searchContainer", "selection" ); }, initContainer: function (){ var selector=".select2-choices", selection; this.searchContainer=this.container.find(".select2-search-field"); this.selection=selection=this.container.find(selector); var _this=this; this.selection.on("click", ".select2-search-choice:not(.select2-locked)", function (e){ _this.search[0].focus(); _this.selectChoice($(this)); }); this.search.attr("id", "s2id_autogen"+nextUid()); this.search.prev() .text($("label[for='" + this.opts.element.attr("id") + "']").text()) .attr('for', this.search.attr('id')); this.search.on("input paste", this.bind(function(){ if(this.search.attr('placeholder')&&this.search.val().length==0) return; if(!this.isInterfaceEnabled()) return; if(!this.opened()){ this.open(); }})); this.search.attr("tabindex", this.elementTabIndex); this.keydowns=0; this.search.on("keydown", this.bind(function (e){ if(!this.isInterfaceEnabled()) return; ++this.keydowns; var selected=selection.find(".select2-search-choice-focus"); var prev=selected.prev(".select2-search-choice:not(.select2-locked)"); var next=selected.next(".select2-search-choice:not(.select2-locked)"); var pos=getCursorInfo(this.search); if(selected.length && (e.which==KEY.LEFT||e.which==KEY.RIGHT||e.which==KEY.BACKSPACE||e.which==KEY.DELETE||e.which==KEY.ENTER)){ var selectedChoice=selected; if(e.which==KEY.LEFT&&prev.length){ selectedChoice=prev; } else if(e.which==KEY.RIGHT){ selectedChoice=next.length ? next:null; } else if(e.which===KEY.BACKSPACE){ if(this.unselect(selected.first())){ this.search.width(10); selectedChoice=prev.length ? prev:next; }}else if(e.which==KEY.DELETE){ if(this.unselect(selected.first())){ this.search.width(10); selectedChoice=next.length ? next:null; }}else if(e.which==KEY.ENTER){ selectedChoice=null; } this.selectChoice(selectedChoice); killEvent(e); if(!selectedChoice||!selectedChoice.length){ this.open(); } return; }else if(((e.which===KEY.BACKSPACE&&this.keydowns==1) || e.which==KEY.LEFT)&&(pos.offset==0&&!pos.length)){ this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last()); killEvent(e); return; }else{ this.selectChoice(null); } if(this.opened()){ switch (e.which){ case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which===KEY.UP) ? -1:1); killEvent(e); return; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return; case KEY.TAB: this.selectHighlighted({noFocus:true}); this.close(); return; case KEY.ESC: this.cancel(e); killEvent(e); return; }} if(e.which===KEY.TAB||KEY.isControl(e)||KEY.isFunctionKey(e) || e.which===KEY.BACKSPACE||e.which===KEY.ESC){ return; } if(e.which===KEY.ENTER){ if(this.opts.openOnEnter===false){ return; }else if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){ return; }} this.open(); if(e.which===KEY.PAGE_UP||e.which===KEY.PAGE_DOWN){ killEvent(e); } if(e.which===KEY.ENTER){ killEvent(e); }})); this.search.on("keyup", this.bind(function (e){ this.keydowns=0; this.resizeSearch(); }) ); this.search.on("blur", this.bind(function(e){ this.container.removeClass("select2-container-active"); this.search.removeClass("select2-focused"); this.selectChoice(null); if(!this.opened()) this.clearSearch(); e.stopImmediatePropagation(); this.opts.element.trigger($.Event("select2-blur")); })); this.container.on("click", selector, this.bind(function (e){ if(!this.isInterfaceEnabled()) return; if($(e.target).closest(".select2-search-choice").length > 0){ return; } this.selectChoice(null); this.clearPlaceholder(); if(!this.container.hasClass("select2-container-active")){ this.opts.element.trigger($.Event("select2-focus")); } this.open(); this.focusSearch(); e.preventDefault(); })); this.container.on("focus", selector, this.bind(function (){ if(!this.isInterfaceEnabled()) return; if(!this.container.hasClass("select2-container-active")){ this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); this.dropdown.addClass("select2-drop-active"); this.clearPlaceholder(); })); this.initContainerWidth(); this.opts.element.addClass("select2-offscreen"); this.clearSearch(); }, enableInterface: function(){ if(this.parent.enableInterface.apply(this, arguments)){ this.search.prop("disabled", !this.isInterfaceEnabled()); }}, initSelection: function (){ var data; if(this.opts.element.val()===""&&this.opts.element.text()===""){ this.updateSelection([]); this.close(); this.clearSearch(); } if(this.select||this.opts.element.val()!==""){ var self=this; this.opts.initSelection.call(null, this.opts.element, function(data){ if(data!==undefined&&data!==null){ self.updateSelection(data); self.close(); self.clearSearch(); }}); }}, clearSearch: function (){ var placeholder=this.getPlaceholder(), maxWidth=this.getMaxSearchWidth(); if(placeholder!==undefined&&this.getVal().length===0&&this.search.hasClass("select2-focused")===false){ this.search.val(placeholder).addClass("select2-default"); this.search.width(maxWidth > 0 ? maxWidth:this.container.css("width")); }else{ this.search.val("").width(10); }}, clearPlaceholder: function (){ if(this.search.hasClass("select2-default")){ this.search.val("").removeClass("select2-default"); }}, opening: function (){ this.clearPlaceholder(); this.resizeSearch(); this.parent.opening.apply(this, arguments); this.focusSearch(); if(this.search.val()===""){ if(this.nextSearchTerm!=undefined){ this.search.val(this.nextSearchTerm); this.search.select(); }} this.updateResults(true); if(this.opts.shouldFocusInput(this)){ this.search.focus(); } this.opts.element.trigger($.Event("select2-open")); }, close: function (){ if(!this.opened()) return; this.parent.close.apply(this, arguments); }, focus: function (){ this.close(); this.search.focus(); }, isFocused: function (){ return this.search.hasClass("select2-focused"); }, updateSelection: function (data){ var ids=[], filtered=[], self=this; $(data).each(function (){ if(indexOf(self.id(this), ids) < 0){ ids.push(self.id(this)); filtered.push(this); }}); data=filtered; this.selection.find(".select2-search-choice").remove(); $(data).each(function (){ self.addSelectedChoice(this); }); self.postprocessResults(); }, tokenize: function(){ var input=this.search.val(); input=this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts); if(input!=null&&input!=undefined){ this.search.val(input); if(input.length > 0){ this.open(); }} }, onSelect: function (data, options){ if(!this.triggerSelect(data)||data.text===""){ return; } this.addSelectedChoice(data); this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data }); this.nextSearchTerm=this.opts.nextSearchTerm(data, this.search.val()); this.clearSearch(); this.updateResults(); if(this.select||!this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true); if(this.opts.closeOnSelect){ this.close(); this.search.width(10); }else{ if(this.countSelectableResults()>0){ this.search.width(10); this.resizeSearch(); if(this.getMaximumSelectionSize() > 0&&this.val().length >=this.getMaximumSelectionSize()){ this.updateResults(true); }else{ if(this.nextSearchTerm!=undefined){ this.search.val(this.nextSearchTerm); this.updateResults(); this.search.select(); }} this.positionDropdown(); }else{ this.close(); this.search.width(10); }} this.triggerChange({ added: data }); if(!options||!options.noFocus) this.focusSearch(); }, cancel: function (){ this.close(); this.focusSearch(); }, addSelectedChoice: function (data){ var enableChoice = !data.locked, enabledItem=$( "
  • " + "
    " + " " + "
  • "), disabledItem=$( "
  • " + "
    " + "
  • "); var choice=enableChoice ? enabledItem:disabledItem, id=this.id(data), val=this.getVal(), formatted, cssClass; formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup); if(formatted!=undefined){ choice.find("div").replaceWith("
    "+formatted+"
    "); } cssClass=this.opts.formatSelectionCssClass(data, choice.find("div")); if(cssClass!=undefined){ choice.addClass(cssClass); } if(enableChoice){ choice.find(".select2-search-choice-close") .on("mousedown", killEvent) .on("click dblclick", this.bind(function (e){ if(!this.isInterfaceEnabled()) return; this.unselect($(e.target)); this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); killEvent(e); this.close(); this.focusSearch(); })).on("focus", this.bind(function (){ if(!this.isInterfaceEnabled()) return; this.container.addClass("select2-container-active"); this.dropdown.addClass("select2-drop-active"); })); } choice.data("select2-data", data); choice.insertBefore(this.searchContainer); val.push(id); this.setVal(val); }, unselect: function (selected){ var val=this.getVal(), data, index; selected=selected.closest(".select2-search-choice"); if(selected.length===0){ throw "Invalid argument: " + selected + ". Must be .select2-search-choice"; } data=selected.data("select2-data"); if(!data){ return; } var evt=$.Event("select2-removing"); evt.val=this.id(data); evt.choice=data; this.opts.element.trigger(evt); if(evt.isDefaultPrevented()){ return false; } while((index=indexOf(this.id(data), val)) >=0){ val.splice(index, 1); this.setVal(val); if(this.select) this.postprocessResults(); } selected.remove(); this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); this.triggerChange({ removed: data }); return true; }, postprocessResults: function (data, initial, noHighlightUpdate){ var val=this.getVal(), choices=this.results.find(".select2-result"), compound=this.results.find(".select2-result-with-children"), self=this; choices.each2(function (i, choice){ var id=self.id(choice.data("select2-data")); if(indexOf(id, val) >=0){ choice.addClass("select2-selected"); choice.find(".select2-result-selectable").addClass("select2-selected"); }}); compound.each2(function(i, choice){ if(!choice.is('.select2-result-selectable') && choice.find(".select2-result-selectable:not(.select2-selected)").length===0){ choice.addClass("select2-selected"); }}); if(this.highlight()==-1&&noHighlightUpdate!==false){ self.highlight(0); } if(!this.opts.createSearchChoice&&!choices.filter('.select2-result:not(.select2-selected)').length > 0){ if(!data||data&&!data.more&&this.results.find(".select2-no-results").length===0){ if(checkFormatter(self.opts.formatNoMatches, "formatNoMatches")){ this.results.append("
  • " + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + "
  • "); }} }}, getMaxSearchWidth: function(){ return this.selection.width() - getSideBorderPadding(this.search); }, resizeSearch: function (){ var minimumWidth, left, maxWidth, containerLeft, searchWidth, sideBorderPadding=getSideBorderPadding(this.search); minimumWidth=measureTextWidth(this.search) + 10; left=this.search.offset().left; maxWidth=this.selection.width(); containerLeft=this.selection.offset().left; searchWidth=maxWidth - (left - containerLeft) - sideBorderPadding; if(searchWidth < minimumWidth){ searchWidth=maxWidth - sideBorderPadding; } if(searchWidth < 40){ searchWidth=maxWidth - sideBorderPadding; } if(searchWidth <=0){ searchWidth=minimumWidth; } this.search.width(Math.floor(searchWidth)); }, getVal: function (){ var val; if(this.select){ val=this.select.val(); return val===null ? []:val; }else{ val=this.opts.element.val(); return splitVal(val, this.opts.separator); }}, setVal: function (val){ var unique; if(this.select){ this.select.val(val); }else{ unique=[]; $(val).each(function (){ if(indexOf(this, unique) < 0) unique.push(this); }); this.opts.element.val(unique.length===0 ? "":unique.join(this.opts.separator)); }}, buildChangeDetails: function (old, current){ var current=current.slice(0), old=old.slice(0); for (var i=0; i < current.length; i++){ for (var j=0; j < old.length; j++){ if(equal(this.opts.id(current[i]), this.opts.id(old[j]))){ current.splice(i, 1); if(i>0){ i--; } old.splice(j, 1); j--; }} } return {added: current, removed: old};}, val: function (val, triggerChange){ var oldData, self=this; if(arguments.length===0){ return this.getVal(); } oldData=this.data(); if(!oldData.length) oldData=[]; if(!val&&val!==0){ this.opts.element.val(""); this.updateSelection([]); this.clearSearch(); if(triggerChange){ this.triggerChange({added: this.data(), removed: oldData}); } return; } this.setVal(val); if(this.select){ this.opts.initSelection(this.select, this.bind(this.updateSelection)); if(triggerChange){ this.triggerChange(this.buildChangeDetails(oldData, this.data())); }}else{ if(this.opts.initSelection===undefined){ throw new Error("val() cannot be called if initSelection() is not defined"); } this.opts.initSelection(this.opts.element, function(data){ var ids=$.map(data, self.id); self.setVal(ids); self.updateSelection(data); self.clearSearch(); if(triggerChange){ self.triggerChange(self.buildChangeDetails(oldData, self.data())); }}); } this.clearSearch(); }, onSortStart: function(){ if(this.select){ throw new Error("Sorting of elements is not supported when attached to instead."); } this.search.width(0); this.searchContainer.hide(); }, onSortEnd:function(){ var val=[], self=this; this.searchContainer.show(); this.searchContainer.appendTo(this.searchContainer.parent()); this.resizeSearch(); this.selection.find(".select2-search-choice").each(function(){ val.push(self.opts.id($(this).data("select2-data"))); }); this.setVal(val); this.triggerChange(); }, data: function(values, triggerChange){ var self=this, ids, old; if(arguments.length===0){ return this.selection .children(".select2-search-choice") .map(function(){ return $(this).data("select2-data"); }) .get(); }else{ old=this.data(); if(!values){ values=[]; } ids=$.map(values, function(e){ return self.opts.id(e); }); this.setVal(ids); this.updateSelection(values); this.clearSearch(); if(triggerChange){ this.triggerChange(this.buildChangeDetails(old, this.data())); }} }}); $.fn.select2=function (){ var args=Array.prototype.slice.call(arguments, 0), opts, select2, method, value, multiple, allowedMethods=["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"], valueMethods=["opened", "isFocused", "container", "dropdown"], propertyMethods=["val", "data"], methodsMap={ search: "externalSearch" }; this.each(function (){ if(args.length===0||typeof(args[0])==="object"){ opts=args.length===0 ? {}:$.extend({}, args[0]); opts.element=$(this); if(opts.element.get(0).tagName.toLowerCase()==="select"){ multiple=opts.element.prop("multiple"); }else{ multiple=opts.multiple||false; if("tags" in opts){opts.multiple=multiple=true;}} select2=multiple ? new window.Select2["class"].multi():new window.Select2["class"].single(); select2.init(opts); }else if(typeof(args[0])==="string"){ if(indexOf(args[0], allowedMethods) < 0){ throw "Unknown method: " + args[0]; } value=undefined; select2=$(this).data("select2"); if(select2===undefined) return; method=args[0]; if(method==="container"){ value=select2.container; }else if(method==="dropdown"){ value=select2.dropdown; }else{ if(methodsMap[method]) method=methodsMap[method]; value=select2[method].apply(select2, args.slice(1)); } if(indexOf(args[0], valueMethods) >=0 || (indexOf(args[0], propertyMethods) >=0&&args.length==1)){ return false; }}else{ throw "Invalid arguments to select2 plugin: " + args; }}); return (value===undefined) ? this:value; }; $.fn.select2.defaults={ width: "copy", loadMorePadding: 0, closeOnSelect: true, openOnEnter: true, containerCss: {}, dropdownCss: {}, containerCssClass: "", dropdownCssClass: "", formatResult: function(result, container, query, escapeMarkup){ var markup=[]; markMatch(result.text, query.term, markup, escapeMarkup); return markup.join(""); }, formatSelection: function (data, container, escapeMarkup){ return data ? escapeMarkup(data.text):undefined; }, sortResults: function (results, container, query){ return results; }, formatResultCssClass: function(data){return data.css;}, formatSelectionCssClass: function(data, container){return undefined;}, minimumResultsForSearch: 0, minimumInputLength: 0, maximumInputLength: null, maximumSelectionSize: 0, id: function (e){ return e==undefined ? null:e.id; }, matcher: function(term, text){ return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >=0; }, separator: ",", tokenSeparators: [], tokenizer: defaultTokenizer, escapeMarkup: defaultEscapeMarkup, blurOnChange: false, selectOnBlur: false, adaptContainerCssClass: function(c){ return c; }, adaptDropdownCssClass: function(c){ return null; }, nextSearchTerm: function(selectedObject, currentSearchTerm){ return undefined; }, searchInputPlaceholder: '', createSearchChoicePosition: 'top', shouldFocusInput: function (instance){ var supportsTouchEvents=(('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0)); if(!supportsTouchEvents){ return true; } if(instance.opts.minimumResultsForSearch < 0){ return false; } return true; }}; $.fn.select2.locales=[]; $.fn.select2.locales['en']={ formatMatches: function (matches){ if(matches===1){ return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; }, formatNoMatches: function (){ return "No matches found"; }, formatAjaxError: function (jqXHR, textStatus, errorThrown){ return "Loading failed"; }, formatInputTooShort: function (input, min){ var n=min - input.length; return "Please enter " + n + " or more character" + (n==1 ? "":"s"); }, formatInputTooLong: function (input, max){ var n=input.length - max; return "Please delete " + n + " character" + (n==1 ? "":"s"); }, formatSelectionTooBig: function (limit){ return "You can only select " + limit + " item" + (limit==1 ? "":"s"); }, formatLoadMore: function (pageNumber){ return "Loading more results…"; }, formatSearching: function (){ return "Searching…"; }, }; $.extend($.fn.select2.defaults, $.fn.select2.locales['en']); $.fn.select2.ajaxDefaults={ transport: $.ajax, params: { type: "GET", cache: false, dataType: "json" }}; window.Select2={ query: { ajax: ajax, local: local, tags: tags }, util: { debounce: debounce, markMatch: markMatch, escapeMarkup: defaultEscapeMarkup, stripDiacritics: stripDiacritics }, "class": { "abstract": AbstractSelect2, "single": SingleSelect2, "multi": MultiSelect2 }};}(jQuery)); (function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s});